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="當前訪問地址" 這樣,在登錄接口我們就可以獲取到這個地址,從而在登錄成功后重定向到這個地址