1.is_authenticate
判断用户是否登录
介绍:
- Django用户认证系统提供了方法
request.user.is_authenticated()
来判断用户是否登录。- 如果通过登录验证则返回True。反之,返回False。
- 缺点:登录验证逻辑很多地方都需要,所以该代码需要重复编码好多次。
class UserInfoView(View): """用户中心""" def get(self, request): """提供个人信息界面""" if request.user.is_authenticated(): return render(request, 'user_center_info.html') else: return redirect(reverse('users:login'))
2. Django框架判断登陆的简化方案:
使用 LoginRequiredMixin 实现:
使用方法:在需要登录才能访问的视图中继承这个类,然后在setting.py中配置LOGIN_URL = '登录的url'
就行了
from django.contrib.auth.mixins import LoginRequiredMixin class UsernameCountView(LoginRequiredMixin, View):
# 判断用户是否登录,没有登录后重定向到登录页面的url LOGIN_URL='/login/'
访问这个视图后,会先判断是否登录,如果未登录会重定向到配置中LOGIN_URL的url
为了实现登录后定位到未登录时访问的地址,在登录的接口中,判断next属性,如果有,重定向到next所指向的位置
# 响应登录结果 next = request.GET.get('next') if next: response = redirect(next) else: response = redirect(reverse('contents:index'))
原理:LoginRequiredMixin中在实现重定向到登录页面时,会在登录的url中拼接上 ?next="当前访问地址" 这样,在登录接口我们就可以获取到这个地址,从而在登录成功后重定向到这个地址