• auth模块


    一、作用:django项目在首次使用数据迁移命令后,会生成一些默认的表,其中有一张名为auth_user的表,就是用来记录用户信息的表,而auth模块就是提供了对这张表进行操作的相关方法。

    二、超级管理员:初始的auth_user表没有任何内容,需要先通过指令<python manage.py createsuperuser>来先创建一个超级管理员,新建的django项目有个默认的<admin>路由,进去页面后需要输入用户名和密码,此处就是参照的auth_user表的信息,只有超级管理员才可以在此登录。

    三、auth模块的基本方法

      1、必用模块:

    from django.contrib import auth  # 主模块,包含所有主要方法
    from django.contrib.auth.decorators import login_required  # 登录验证装饰器相关方法
    from django.contrib.auth.models import User  # 导入auth_user表

      2、添加普通用户:User.objects.create_user(username=新用户名, password=新密码)。

        使用create_创建的用户信息,密码才是密文,才能使用auth模块的各种校验机制。

      3、添加超级管理员:User.objects.create_superuser(username=新用户名, email=新邮箱, password=新密码)。

        在视图层里面创建超级管理员,邮箱是必填的,而通过指令创建时,输入邮箱的步骤可以跳过。

        一般创建超级管理员的权限不会暴露给前端。

      4、校验用户名与密码:auth.authenticate(request, username=待校验用户名, password=待校验密码)。

        该方法必须同时校验用户名与密码。

        校验通过,返回用户对象。

        校验失败,返回None。

      5、校验密码:request.user.check_password(待校验密码)。

        需要在已登录的状态下,与当前登录的用户信息做校验。

      6、修改密码:

        第一步,request.user.set_password(新密码)。 --- 只是临时修改了用户对象的密码。

        第二部,request.user.save()。 --- 真正同步到了数据库。

        需要在已登录的状态下,修改的是当前登录的用户信息。

      7、保存用户登录状态:auth.login(request, 用户对象)。

      8、判断当前是否有用户登录:request.user.is_authenticated()。、

        返回布尔值。

      9、获取当前登录的用户:request.user。

      10、注销当前登录的用户:auth.logout(request)。

      11、登录校验装饰器:

        @login_required(login_url='/登录路由/')。 --- 给某一视图函数配置跳转地址。

        在settings.py中书写:LOGIN_URL = '/登录路由/'。 --- 给全局所有加了登录校验装饰器的视图函数配置跳转地址。

        局部和全局都配置了的情况下, 以局部为准。

    四、给auth_user表增加额外的字段

      1、补充字段另外建表:新建一个表,与auth_user表建立一对一关系,如此不便于统筹操作表的方法,所以不推荐使用。

      2、新建一个表来替换auth_user表:

        必用模块:

    from django.contrib.auth.models import AbstractUser

        新表的类必须继承AbstractUser。

        当前数据库还没用使用数据迁移命令产生默认的auth_user表。

        新表中额外增加的字段名不要与AbstractUser中的字段名有冲突。

        在settings.py中书写:AUTH_USER_MODEL = 'app名.新表的类名'。

        至此,便实现了替换,再用数据迁移指令后,不再会默认创建auth_user,取而代之的是创建新表。

        新表可以用所有auth模块的方法,把原本写<user>的地方改为新表名即可。

  • 相关阅读:
    移动端页面开发
    全屏滚动-jQuery插件实现
    面向对象技术
    JS堆栈与拷贝
    util 学习
    node.js 中的全局对象
    在webstrorm中配置好es6 babel【更新:在webstorm中配置.vue和.vue文件中支持es6】
    与后台进行连接,mysql模块 第六篇
    在node.js中使用ejs的demo 第五篇
    项目中经常用到的reset.css文件
  • 原文地址:https://www.cnblogs.com/caoyu080202201/p/13081803.html
Copyright © 2020-2023  润新知