当前位置 : 主页 > 编程语言 > python >

Auth模块

来源:互联网 收集:自由互联 发布时间:2021-06-25
Auth模块 Auth模块是Django自带的功能强大的用户认证模块. 在网站的开发中, 用户管理系统的设计也是一个麻烦的问题, 此时我们需要实现包括用户的注册, 登录, 注销, 认证, 密码管理等功

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"
网友评论