• 用户认证组件


    认证系统

    auth模块

    1. auth_user表:

      • auth_user表存储用户信息

      • 模块导入

        from django.contrib import auth
        
      • 命令行添加用户. auth_user表是django自带,并不是models.py创建

        python manage.py createsuperuser
        
      • auth_user表结构

        username: 用户名. 150字符,唯一
        first_name: 30字符. 可为空
        last_name: 30字符, 可为空
        email: 可为空
        password: 哈希加密后的密码
        is_staff: 是否可进入admin站点.是否为员工.不使用admin可以忽略
        is_active: 是否可用.如要删除账号的数据,设置此值为false,不是真正的从数据库删除
        is_superuser: 是否超级管理员,超级管理员拥有整个网站的所有权限
        last_login: 上次登陆时间
        date_joined: 账号创建时间
        
    2. auth_user方法:

      • authenticate(username=.., password=…)

        • 用户认证,验证用户名和密码
        • 需要username,password两个关键字参数,即auth_user表字段
        • 用户名和密码认证:即auth_user表是否存在记录
          • 认证成功: 返回user对象
          • 认证失败: 返回None
        from django.contrib.auth import authenticate # 方法导入
        
        user_obj = auth.authenticate(username='sunny', password='password')
        
      • **login(HttpRequest, user)**

        • 用户登陆. 本质上会在后端为该用户生成相关的session数据, 保持会话
        • 参数: HttpRequest对象. 经过认证的user对象
        • 使用django的session框架给某个已认证的用户附加上session id等信息
        from django.contrib.auth import authenticate, login
        
        user_obj = auth.authenticate(username='sunny', password='password')
        if user_obj:
            # 保存用户状态信息
            login(request, user_obj) # request.session['session_id']=user_obj.pk
            # redirect to a sucess page.
            .....
        else:
            # return an 'invalid login' error message
            .....
        
        • 没有经过login方法封装的用户, 是匿名用户

        • 只要使用login(request, user_obj)之后,request.user 就能取得当前登陆的用户对象. 否则request.user得到的是一个匿名用户对象(AnonymousUser Object, request.user默认值), 值都为空或false

        • request.user对象本身是全局对象,可以直接在模板中使用{{request.user.username}}

          详见AuthenticationMiddleware 中间件源码

      • logout(request)

        • 注销用户, 当前请求的用户session信息全部清除
        • 用户没有登陆,使用该函数也不会报错
        • 无返回值
        from django.contrib.auth import logout
        
        def logout_view(request):
            logout(request)
            # redirect to login page
        
  • 相关阅读:
    判断一个序列是否是另一个序列的前缀
    Ant-打增量包
    cas-单点登录-应用说明
    firebug离线安装方法-拖入法
    oracle-获取数据库中所有表的注释 comments
    跨浏览器的placeholder – 原生JS版
    birt IE8 IE9 兼容问题
    websphere部署--web应用-以自己的项目为例
    JSP-页面跳转大全
    Oracle中Union与Union All的区别(适用多个数据库)
  • 原文地址:https://www.cnblogs.com/relaxlee/p/12944282.html
Copyright © 2020-2023  润新知