登錄判斷,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"})