Django自带用户验证系统
django验证系统
背景
解决问题:
当用户登录的时候,则需要进行验证,而用户登录了以后还希望能够记录它的登录状态,为此django提供了验证和记住登录状态的函数
参考文档:https://docs.djangoproject.com/zh-hans/3.1/topics/auth/default/
使用
在项目的settings.py文件中添加配置信息
1
2# 使用django自带的用户验证时,需要配置该选项,否则验证的结果一直为None
AUTHENTICATION_BACKENDS = ['django.contrib.auth.backends.AllowAllUsersModelBackend']在视图中使用
1
2
3
4
5
6
7
8
9
10
11
12
13# 使用django自带的验证系统
# 用户登录以后,一般需要记录用户的登录状态,
# 此时不建议将其存储在django自身的session表中,而是将其记录在redis数据库中
from django.contrib.auth import authenticate, login
# 登录验证,用的是django自带的用户验证方式
# 如果查询的结果能够获取到数据,则返回数据,否则返回None
user = authenticate(username=username, password=password)
# 使用session记录用户的登录状态,login()函数是将用户的ID信息保存在session表中
# 用户信息验证成功后才记录状态
# 第一个参数是request对象,第二个是数据库存储的该用户的数据对象
login(request, user)详细案例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29from django.contrib.auth import authenticate, login
def post(self, request):
'''用户登录请求'''
username = request.POST.get('username')
password = request.POST.get('pwd')
remember = request.POST.get('remember')
if not all([username, password]):
return render(request, 'User/login.html', {"msg": "用户名或密码错误"})
user = authenticate(username=username, password=password)
if user is not None:
# 判断用户是否激活了
if user.is_active:
login(request, user)
# 生成返回值对象,redirect是导入的重定向函数
response = redirect('goods:index')
# 设置cookie信息
if remember == 'on':
response.set_cookie('username', username, max_age=7 * 24 * 3600)
else:
# 删除Cookie的方法:delete_cookie
response.delete_cookie('username')
return response
else:
return render(request, 'User/login.html', {"msg": "你得账户还没有激活,请及时激活"})
else:
return render(request, 'User/login.html', {"msg": "输入的密码不正确"})
django验证登录
背景
解决问题
有些页面只允许登录用户才可以访问,对于这类页面,当用户访问的时候,我们需要对其登录进行验证
使用模块
django自带的验证系统:login_required装饰器 / LoginRequired Mixin。使用该方式验证的前提是使用django自带的登录函数login登录
参考文档:
https://docs.djangoproject.com/zh-hans/3.1/topics/auth/default/
使用
配置项目settings.py中的 LOGIN_URL 配置项
1
2
3# 如果不配置该选项,则用户默认跳转至/account/login页面,通过配置该项可以修改用户跳转的页面
# 如果未配置,则需要修改urls.py中的视图,便于关联/account/login视图
LOGIN_URL = '/user/login'在需要用到登录验证的视图中继承LoginRequiredMixin类
1
2
3
4
5
6
7# 使用Mixins验证用户是否登录
from django.contrib.auth.mixins import LoginRequiredMixin
# 在需要验证的视图类中,首先继承LoginRequiredMixin类
class UserInfoView(LoginRequiredMixin, View):
def get(self, request):
return render(request, 'User/user_center_info.html', {'page':"user"})此时访问该视图对应的页面,如果已经登录,则可以直接访问该页面,否则跳转到 LOGIN_URL 配置的页面
拓展
1 | class UserInfoView(LoginRequiredMixin, View): |
django用户退出
背景
解决问题
当用户退出时,我们需要将其存放在本地的所有与个人验证相关的数据全部删除
使用模块
django自带的logout
参考文档
https://docs.djangoproject.com/zh-hans/3.1/topics/auth/default/
使用
1 | # 导入login的模块 |