zoukankan      html  css  js  c++  java
  • Django用户认证系统

    一. 认证系统概要

    • create_user 创建用户
    • authenticate 验证登录
    • login 记住用户的登录状态
    • logout 退出登录
    • is_authenticated 判断用户是否登录
    • login_required 判断用户是否登录的装饰器

    二. 创建用户和验证登录

    1. 当用户注册的时候用create_user(username,password,email)默认情况下is_active=True,is_staff=False,is_superuser=False

      • 底层将password用hash算法加密之后存储到数据库中。
    2. 当用户登录的时候用authenticate(username=username,password=password)验证登录,判断数据库中是否存在用户输入的账号和密码,返回一个user对象。

      • 底层将password用hash算法加密后和数据库中password进行对比。

    三. 记住用户的登录状态

    当用户登录的时候用login(request,user)来记住用户的登录状态,默认将用户的id存储在session中。

    • login有两个参数一个是request,一个是user,user的来源必须是authenticate返回的。也就是说用login之前必须先调用authenticate

    四. 退出登录

    当用户注销的时候用logout(request),只需要一个参数request。

    五. 判断用户是否登录

    1. 在后台的视图函数里可以用request.user.is_authenticated()判断用户是否登录
    2. 在前端页面中可以用{% if user.is_authenticated %}{% endif %}判断用户是否登录

    六. 装饰器判断用户是否登录

    1. 基于普通的视图函数可以使用@login_required来装饰,但是基于类视图的get和post方法不能直接使用@login_required来装饰。
    2. 基于类视图的装饰有以下三种:
      • 第一种:在urls文件中导入login_requtred,直接装饰as_view()函数
      url(r'^$', login_required(UserInfoView.as_view()), name='user') 
      
      • 第二种:自定义一个LoginRequiredView类继承View类,重写as_view()函数,并装饰as_view()函数的返回值。 我们自定义的视图类就不需要再继承View类,直接继承LoginRequiredView类就好了。

          class LoginRequiredView(View):
              @classmethod
              def as_view(cls, **initkwargs):
                  # 调用View类中as_view方法
                  view = super(LoginRequiredView, cls).as_view(**initkwargs)
                  # 调用login_required装饰器
                  return login_required(view)
        
      • 第三种:自定义一个LoginRequiredMixin类,重写as_view()函数,调用View中的as_view()函数,并装饰as_view()函数的返回值。 我们自定义的视图类需要先继承LoginRequiredMixin类再继承View类。这种方式的关键点在于:多继承中super()的调用顺序和__mro__的顺序是一样的

          class LoginRequiredMixin(object):
              @classmethod
              def as_view(cls, **initkwargs):
                  # 调用View类中as_view方法
                  view = super(LoginRequiredMixin, cls).as_view(**initkwargs)
          
                  # 调用login_required装饰器
                  return login_required(view)
  • 相关阅读:
    类的访问级别
    包和静态引入
    数组
    流程控制
    适合初学者的ROS机器人教程(3): ROS下使用Python对UR5机器人建模与控制
    适合初学者的强化学习教程(1): python使用gym实践和注意事项
    适合初学者的ROS机器人教程(1): Ubuntu下ROS创建自己的包和使用github下载的包
    适合初学者的ROS机器人教程(2): Ubuntu下ROS使用Gazebo和Rviz对UR5机器人建模
    spyder使用IPython的ipdb调试
    mysql创建外键
  • 原文地址:https://www.cnblogs.com/RomanticLife/p/8456940.html
Copyright © 2011-2022 走看看