文章目录
前言
Django作为一个完美主义者的终极框架,而登录和注册几乎是每一个网站必备的部分,所以Django也封装有关于用户登录、注册有关的系统——Auth。本文即来介绍一下Auth模块
提示:以下是本篇文章正文内容,下面案例可供参考
一、Auth认证系统的介绍
Django除了内置的Admin后台管理系统,还内置了Auth认证系统。整个Auth认证系统可分为三大部分用户信息、用户权限、用户组,在数据库中分别对应auth_user、auth_permission、auth_group
二、User
1.Django内置模型User
导入:from django.contrib.auth.models import User
Django内置模型User一共定义了11个字段:
字段 | 说明 |
---|---|
id | int类型,自增id |
passwoed | varchar 类型,用户密码,默认使用pbkdf2_sha256方式来存储密码。 |
last_login | datatime类型 最近一次登录时间,会自动改变值 |
is_superuser | tinyint类型,是否拥有所有权限 。1为true,不填默认为否。 |
username | varchar 类型,代表用户账户 |
first_name | varchar 类型 姓 |
last_name | varchar 类型 名 |
varchar 类型 电子邮件 | |
is_active | tinyint类型,用户是否被激活 。1为true,不填默认为否。 |
is_staff | tinyint类型,是否能进入Admin后台系统。1为true,不填默认为否。 |
date_joined | datetiem类型,账号创建时间 |
注:在注册时,以上所有字段参数只有username是必须参数,其余皆是可选参数。如没有设置参数password,模型User就会自动调用set_unusable_password()方法为当前用户随机创建密码。
2.常见方法介绍
导入模块:from django.contrib import auth
1.authenticate(username=,password=)提供了用户认证功能,即验证用户名以及密码是否正确,一般需要username 、password两个关键字参数。如果认证成功(用户名和密码正确有效),便会返回一个 User 对象。该方法不检查is_active标志位。authenticate()会在该 User 对象上设置一个属性来标识后端已经认证了该用户,且该信息在后续的登录过程中是需要的。
User对象方法
1.is_authenticated()用来判断当前请求是否通过了认证
2.check_password(password) auth 提供的一个检查密码是否正确的方法,需要提供当前请求用户的密码。密码正确返回True,否则返回False。
3.set_password(password) auth 提供的一个修改密码的方法,接收 要设置的新密码 作为参数。注意:设置完一定要调用用户对象的save方法!!!
user = auth.authenticate(username=someone, password=old_password)
if user is not None:
user.set_password(new_password)
user.save()
登录、注销相关方法
导入:from django.contrib.auth import login,logout,authenticate
1.login(HttpRequest, user) 该函数接受一个HttpRequest对象,以及一个经过认证的User对象。该函数实现一个用户登录的功能。它本质上会在后端为该用户生成相关session数据
2.logout(request) 该函数接受一个HttpRequest对象,无返回值。当调用该函数时,当前请求的session信息会全部清除。该用户即使没有登录,使用该函数也不会报错。
3.login_requierd(login_url)auth 给我们提供的一个装饰器工具,,用来快捷的给某个视图添加登录校验。若用户没有登录,则会跳转到django默认的 登录login_url, 并传递当前访问url的绝对路径 (登陆成功后,会重定向到该路径)。若未指定login_url参数, 则重定向到settings.LOGIN_URL如果需要自定义登录的URL,则需要在settings.py文件中通过LOGIN_URL进行修改。
login(示例):
def userloging(request):
if request.method=='POST':
u=request.POST.get("username",'')
p=request.POST.get('password','')
if User.objects.filter(username=u):
user=authenticate(username=u,password=p)
if user is not None:
if user.is_active:
login(request,user)
kwargs={
'id':request.user.id,'page':1}
return redirect(reverse('article',kwargs=kwargs))
return render(request,'user.html',locals())
logout(示例):
def register(request):
if request.method=='POST':
u=request.POST.get("username",'')
p=request