Django之auth认证系统
auth模块简介
在开发一个网站的时候,无可避免的需要设计实现网站的用户系统。此时我们需要实现包括用户注册、用户登录、用户认证、注销、修改密码等功能。
Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点。它内置了强大的用户认证系统--auth,它默认使用 auth_user 表来存储用户数据,使用auth模块来进行用户认证,那么需要使用人家django自带的auth_user表来存储用户的信息数据。
auth模块使用
在初始化创建数据库时,会自动生一个auth_user的表,就是用来做认证使用的,当然也可以自定义这个认证表的名称和字段内容!
django中auth认证的流程:
1. 视图中导入认证模块和用户表:
from django.contrib import auth
from django.contrib.auth.models import User
2. 注册创建新用户:
models.User.objects.create_user(username='',password='')
models.User.objects.create_superuser(username='',password='')
3. 登陆校验,记录状态:
user_obj=auth.authenticate(username='',password='');
auth.login(request,user_obj)自动执行session操作,同时更新request请求对象的user属性为当前用户
4. 访问认证
request.user.is_authenticated判断当前状态Ture/False
5. 退出登录
auth.logout(request)自定执行request.session.flush()方法
6. 修改密码
request.user.check_password(old_password)检验密码是否正确
request.user.set_password(new_password) 设置新密码
request.user.save()提交保存密码
auth_use表自定义:
1. 在models.py文件中重新定义一个类如Userinfo,必须继承AbstractUser类(fromdjango.contrib.auth.modelsimportAbstractUser)
2. 在seetings.py中配置:AUTH_USER_MODEL='app01.Userinfo'#自定义认证表:应用名.类名
3. 在视图中引入时:fromapp01importmodels;from django.contrib import auth
4. 注册时使用:models.Userinfo.objects.create_user()
5. 其它操作均一样
访问认证装饰器方法:
from django.contrib.auth.decorators import login_required
@login_required
def index(request):
# if request.user.is_authenticated:
print(request.user)
if request.method == 'GET':
return render(request, 'index.html')
# else:
# return redirect('login')
若用户没有登录,则会跳转到django默认的 登录URL '/accounts/login/ ;
如果需要自定义登录的URL,则需要在settings.py文件中通过LOGIN_URL进行修改。
LOGIN_URL = '/login/' # 这里配置成你项目登录页面的路由
#状态认证的首页访问(使用装饰器认证状态失败,会自动跳转一个路径,可以在settings中配置指定LOGIN_URL='/login/')
#同时在页面的请求路径会自动加上'?next=/index/'(当前页面路径),
#借此可以在前端通过location.search获取后slice切边获取路径,登录成功之后在success回调函数location.href指向该路径,自动跳转访问的页面