登录判断,Django自带的认证系统
Django认证系统文档:https://yiyibooks.cn/xx/django_182/topics/auth/default.html
登录判断的几种方式:
- 1.if user.is_authenticate:...
- 2.在FBV前添加@login_required
- 3.如果时用的是CBV,可以在url进行匹配时先使用login_required进行判断。
- 4.如果时用的是CBV,使用Mixin,自定义一个LoginRequiredMixin,调用父类的as_view,然后返回login_required包装的函数;
- 5.使用中间件;
如果时用的是CBV,可以在url进行匹配时先使用login_required进行判断。
from django.contrib.auth.decorators import login_required url(r'^order', login_required(UserOrderView.as_view()), name="order"), # 用户订单页面 url(r'^address', login_required(AddressView.as_view()), name="address"), # 用户地址页面 url(r'^$', login_required(UserInfoView.as_view()), name="user"), # 用户订单信息页面
在项目下新建一个utils文件夹,意思为工具包,在utils中新建mixin.py文件,加入如下代码
from django.contrib.auth.decorators import login_required class LoginRequiredMixin(object): @classmethod def as_view(cls, **initkwargs): # 调用父类的as_view方法 view = super(LoginRequiredMixin, cls).as_view(**initkwargs) return login_required(view)
然后,在需要进行登录判断的CBV中继承LoginRequiredMixin类,如下:
from utils.mixin import LoginRequiredMixin class UserOrderView(LoginRequiredMixin, View): """用户中心-订单页""" def get(self, request): """返回用户中心信息页面""" return render(request, "user_center_order.html", {"page": "order"})
