• 第十一篇:auth模块


    什么是auth模块

    auth模块是django自带的与用户相关的功能模块

    我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统。此时我们需要实现包括用户注册、用户登录、用户认证、注销、修改密码等功能,这还真是个麻烦的事情呢。

    Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点。它内置了强大的用户认证系统--auth,它默认使用 auth_user 表来存储用户数据。

    auth模块中常用方法

    auth模块是django用户相关的自带的功能模块,相关的信息记录于auth_user表。

    如何创建超级用户

    # 工具栏中Tools——Run manager.py Task——输入:
     
    > createsuperuser
    > 此处输入用管理员用户名(eg:admin)
    > 此处输入邮箱(邮箱可以不填,直接跳过)
    > 输入账户密码
    > 确认账户密码
     
    # 创建完成之后,auth_user表中就有超级管理员的记录(表中的密码是加密后的)
    

    创建完成之后,可以在浏览器中登陆:

    http://127.0.0.1:8000/admin
    

    登陆之后,可以在浏览器中对所有的模型表进行操作。

    auth方法大全

    1、创建用户

    # 创建普通用户
    User.objects.create()  # 密码是明文,django校验时是和密文进行校验,因此此方法一般不使用
    User.objects.createuser()  # 密码是密文
     
    # 创建超级管理员
    User.objects.createsuperuser()  # 邮箱要给数据 通过创建逻辑代码的方式创建超级管理员,需要填写邮箱
     
    # eg:
    User.objects.createuser(username=xxx, password=xxx)
    User.objects.createsuperuser(username=xxx, password=xxx, email=xxx@xxx.com)
    

    2、校验用户名和密码

    res = auth.authenticate(username=username,password=password)  # 用户名和密码两个一个都不能少
    # 该方法当用户名和密码正确的时候返回的用户对象 不正确返回None
    

    3、保存用户的登录状态

    只要执行了这一句话,之后在任意可以获取到request对象的地方,都可以通过request.user获取到当前登录的用户对象。

    如果没有登录,request.user获取到的是匿名用户(AnonymousUser)。

    auth.login(request,user_obj)  # 这一句执行之后 request.user获取当前登录的用户对象
     
    # 此条语句等价于操作django_session中的表
    

    4、判断用户是否登录,以及获取当前登录用户对象

    request.user.is_authenticated()  # 判断用户是否登录 返回True或False
    request.user  # 登录用户对象
    

    5、登录校验装饰器

    装饰在需要登录后可以操作的功能,例如转账,查看个人信息等功能,需要用户先进行登录。

    # 先导入装饰器模块
    from django.contrib.auth.decorators import login_required
     
    # 局部配置
    @login_required(login_url='/login/')  # 如果没有用户未登录,跳转到指定的url
    def xxx(request):
        return HttpResponse('xxx页面')
     
    # 全局配置
    # 配置文件(settings.py)中写以下代码
    LOGIN_URL = '/login/'
     
    @login_required
    def xxx(request):
        return HttpResponse('xxx页面')
     
    # 如果两个都设置了 那么优先执行局部配置
    

    6、修改密码

    # 校验密码
    is_right = request.user.check_password(old_password)  # 校验原密码是否正确,返回值返回的是bool值
     
     
    # 修改密码
    request.user.set_password(new_password)    # 设置密码
    request.user.save()                        # 设置完密码后,一定要保存
    

    7、注销登录

    注销功能记得也要加登录装饰器,因为只有登录后才可以注销

    auth.logout(request)  # 注销登录
     
    # 使用auth模块注销,django会自动操作session表,这里的注销功能其实就是操作的session表
    

    如何扩展auth_user表

    在扩展表之前需要是一个全新的库,已使用并已经创建auth_user表就不能再扩展了

    利用一对一表关系(了解)

    利用类的继承

    from django.contrib.auth.models import User
    # 导入User类,点击进去,发现继承的是AbstractUser这个类
    

    因此,我们也可以自定义类,并继承AbstractUser

    # 1 类的继承
    from django.contrib.auth.models import AbstractUser
    # Create your models here.
    class Userinfo(AbstractUser):
        phone = models.BigIntegerField()
        avatar = models.FileField()
        # 扩展的字段 尽量不要与原先表中的字段冲突
     
    # 2 配置文件
    AUTH_USER_MODEL = '应用名.表名'
    """
    django就会将userinfo表来替换auth_user表
    并且之前auth模块所有的功能不变 参照的也是userinfo表
    """
    

    数据库迁移命令老是报错,无法解决,最快的方式就是重新建一个库,用新库,或者把应用名下的migrations目录下的所有文件删除,只保留__init__.py,然后重新执行数据库迁移命令。

  • 相关阅读:
    Matlab 画图
    OfferCome-0531
    OfferCome--0528
    剑指offer(2)
    剑指offer(1)
    MySQL的自增主键
    java Junit 测试
    sql 注入问题
    Facebook Libra
    markdown的博客
  • 原文地址:https://www.cnblogs.com/cnhyk/p/12274332.html
Copyright © 2020-2023  润新知