zoukankan      html  css  js  c++  java
  • 用户认证组件

    认证系统

    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
        
  • 相关阅读:
    Java中判断两个列表是否相等
    chrome:插件、跨域、调试....
    mac 开发环境采坑
    webpack升级踩坑
    js-使用装饰器去抖
    React setState 笔试题,下面的代码输出什么?
    react 解决:容器组件更新,导致内容组件重绘
    centos使用ngnix代理https
    javascript 理解继承
    js 数据监听--对象的变化
  • 原文地址:https://www.cnblogs.com/relaxlee/p/12944282.html
Copyright © 2011-2022 走看看