加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Auth模块

发布时间:2020-12-20 10:27:17 所属栏目:Python 来源:网络整理
导读:Auth模块 Auth模块是Django自带的功能强大的用户认证模块. 在网站的开发中,用户管理系统的设计也是一个麻烦的问题,此时我们需要实现包括用户的注册,登录,注销,认证,密码管理等功能. 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,**extra_fields)

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

authenticate(request,username=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"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读