• Auth模块


    Auth模块

    Auth模块是Django自带的功能强大的用户认证模块. 在网站的开发中, 用户管理系统的设计也是一个麻烦的问题, 此时我们需要实现包括用户的注册, 登录, 注销, 认证, 密码管理等功能.

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

    使用Auth模块主要还是需要熟悉它的API, 更详细的信息需要参考官方文档auth模块.

    属性

    is_authenticated

    这个属性用来判断用户是否认证(登录)过, 返回一个布尔值. 用户登录了返回True.否则返回返回False

    is_anonymous

    该属性判断一个用户是否是匿名用户, 返回一个布尔值. 与is_authenticated相反.

    常用方法

    set_password(raw_password)

    这是一个修改密码的方法, 需要接受原来的密码为参数.

    这个方法有一个坑, 就是设置完密码之后, user对象需要调用save方法来保存结果到数据库中.

    check_password(raw_password)

    提供原来的密码来到数据库中进行比对, 正确则返回True, 错误则返回False

    create_user(username, email=None, password=None, **extra_fields)

    当我们使用auth组件之后, 就尽量都使用auth内部已经提供的功能了, 这个创建用户的方法能够自动使用set_password()来创建新用户保存到数据库中. 而如果使用原来的create方法, 则会使用明文保存到数据库中.

    create_superuser(username, email=None, password=None, **extra_fields)

    方法功能与create_user一样, 只不过这个方法是创建超级用户.

    authenticate(request, username=None, password=None, **kwargs)

    提供用户的登录认证功能, 验证用户的用户名与密码是否正确, 如果认证成功, 会返回一个user对象.

    logout(request)

    接收一个request对象, 将该用户在session表中的信息清除掉, 即使用户没有登录, 使用这个方法也不会报错.

    login(HttpRequest, user)

    该函数接受一个HttpRequest对象,以及一个经过认证的User对象.

    该函数实现一个用户登录的功能。它本质上会在后端为该用户生成相关session数据. 用户登录之后就会在session表中填写自己的登录信息.

    login_requierd()

    这个方法是一个登录装饰器, 它能帮我们为一些视图函数提供登录验证.

    如果用户没有登录, 这个登录用户会让用户自动跳转到登录的页面. Django默认的登录页面的URL为/accounts/login/, 这时候我们需要配置登录的URL, 第一种就是局部配置, 在每一个需要登录的视图上指定跳转的登录url. 或是在settings文件中进行全局的配置.

    @login_required(login_url='/login/')
    def test(request):
        pass
    
    # 或是全局配置, 然后装饰器上不指定跳转的url
    @login_required
    def test(request):
        pass
    
    # settings.py
    LOGIN_URL = '/login/'  # 登录页面的url
    

    user对象的字段属性

    username

    用户名, 必须填写

    password

    密码字段, 以密文存储.

    email

    邮箱字段

    is_staff

    bool类型, 判断用户是否允许登录admin_site

    is_active

    用户是否是激活状态

    is_superuser

    是否是超级管理员

    更多字段, 参考文档

    扩展auth表

    很多时候Django预定义的表并不能满足我们的需求, 那么我们就可以通过继承的方式来继承auth_user表来进行扩展.

    Django的默认的user表位于django.contrib.auth.models.AbstractUser , 我们只需要继承这个内置类, 就可以实现扩展功能和属性了.

    class User(AbstractUser):
    
        create_time = models.DateField(auto_now_add=True)
        blog = models.CharField(max_length=32)
    

    但是按照上面进行扩展之后, 需要告诉Django不需要再在迁移的时候, 生成默认的auth_user表了.

    这需要在settings文件中配置, 使用了自定义的认证表之后, 原来的表也就不能使用了.

    AUTH_USER_MODEL = "app名.User"
    
  • 相关阅读:
    Using PL/SQL APIs as Web Services
    1.Cocos2dx 3.2中vector,ValueMap,Touch触摸时间的使用.iconv字符编解码
    我对贝叶斯分类器的理解
    VB.NET的前世今生
    《转》PyQt4 精彩实例分析* 实例2 标准对话框的使用
    网络流合集:bzoj1433,1934,1854 题解
    Android 下拉刷新上拉载入 多种应用场景 超级大放送(上)
    Nginx 笔记与总结(15)nginx 实现反向代理 ( nginx + apache 动静分离)
    深入浅出之数据分析四步曲
    深入浅出之数据分析四步曲
  • 原文地址:https://www.cnblogs.com/yscl/p/11613543.html
Copyright © 2020-2023  润新知