更新時間:2023-01-31 來源:黑馬程序員 瀏覽量:
在通常情況下,網(wǎng)站都會對用戶限制訪問,例如,未登錄的用戶不可訪問用戶中心界面。Djagno框架中使用request.user.is_authenticated屬性、裝飾器login_required和LoginRequiredMixin類三種方式限制用戶訪問。接下來,對這三種限制用戶訪問的方式進行介紹。
request.user.is_authenticated屬性用來判斷用戶是否通過驗證,它是限制未登錄用戶訪問的原始方式,如果用戶未通過驗證則跳轉(zhuǎn)到登錄頁面。示例代碼如下:
from django.conf import settings from django.shortcuts import redirect class UserInfoView(View): def get(self, reuqest): if not request.user.is_authenticated: return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
裝飾器login_required用于在視圖層面限制用戶訪問,它有兩個參數(shù):login_url和redirect_field_name,其中參數(shù)login_url表示重定向地址,默認為None;參數(shù)redirect_field_name表示重定向字段名稱,默認值為“next”,該值保存了用戶成功驗證時瀏覽器跳轉(zhuǎn)的重定向地址。
例如,若用戶未登錄,訪問用戶中心頁面(userinfo.html)時使網(wǎng)站跳轉(zhuǎn)到登錄頁,代碼如下:
@login_required(login_url='/login/',redirect_field_name='my_redirect') def user_center(request): return render(request, 'userinfo.html')
裝飾器中通過login_url參數(shù)設(shè)置的重定向地址也可以在配置文件中通過LOGIN_URL項設(shè)置,示例如下:
LOGIN_URL = '/login/'
需要注意,參數(shù)login_url會優(yōu)先在裝飾器中查找設(shè)置的重定向地址,若未找到則使用在配置文件中設(shè)置的重定向地址。
使用LoginRequiredMixin類同樣可在視圖層面限制用戶訪問,該類的具體用法為:從django.contrib.auth.mixins模塊中引入LoginRequiredMxin,定義繼承LoginRequiredMxin類的類視圖,在其中設(shè)置重定向地址login_url,示例代碼如下:
from django.contrib.auth.mixins import loginRequiredMixin class UserInfoView(LoginRequiredMxin, View): login_url = '/login/' # 設(shè)置重定向地址 def get(self, request): return render('userinfo.html')
需要注意,LoginRequiredMixin類必須位于類視圖基類列表的最左側(cè)。此外,參數(shù)login_url與裝飾器login_required中參數(shù)login_url使用方式一致。