首頁(yè)技術(shù)文章正文

Web請(qǐng)求認(rèn)證中限制用戶訪問(wèn)有幾種方式?

更新時(shí)間:2023-01-31 來(lái)源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

  在通常情況下,網(wǎng)站都會(huì)對(duì)用戶限制訪問(wèn),例如,未登錄的用戶不可訪問(wèn)用戶中心界面。Djagno框架中使用request.user.is_authenticated屬性、裝飾器login_required和LoginRequiredMixin類(lèi)三種方式限制用戶訪問(wèn)。接下來(lái),對(duì)這三種限制用戶訪問(wèn)的方式進(jìn)行介紹。

  1.request.user.is_authenticated屬性

  request.user.is_authenticated屬性用來(lái)判斷用戶是否通過(guò)驗(yàn)證,它是限制未登錄用戶訪問(wèn)的原始方式,如果用戶未通過(guò)驗(yàn)證則跳轉(zhuǎn)到登錄頁(yè)面。示例代碼如下:

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))

  2.裝飾器login_required

  裝飾器login_required用于在視圖層面限制用戶訪問(wèn),它有兩個(gè)參數(shù):login_url和redirect_field_name,其中參數(shù)login_url表示重定向地址,默認(rèn)為None;參數(shù)redirect_field_name表示重定向字段名稱,默認(rèn)值為“next”,該值保存了用戶成功驗(yàn)證時(shí)瀏覽器跳轉(zhuǎn)的重定向地址。

  例如,若用戶未登錄,訪問(wèn)用戶中心頁(yè)面(userinfo.html)時(shí)使網(wǎng)站跳轉(zhuǎn)到登錄頁(yè),代碼如下:

@login_required(login_url='/login/',redirect_field_name='my_redirect')
def user_center(request):
    return render(request, 'userinfo.html')

  裝飾器中通過(guò)login_url參數(shù)設(shè)置的重定向地址也可以在配置文件中通過(guò)LOGIN_URL項(xiàng)設(shè)置,示例如下:

LOGIN_URL = '/login/'

  需要注意,參數(shù)login_url會(huì)優(yōu)先在裝飾器中查找設(shè)置的重定向地址,若未找到則使用在配置文件中設(shè)置的重定向地址。

  3.LoginRequiredMixin類(lèi)

  使用LoginRequiredMixin類(lèi)同樣可在視圖層面限制用戶訪問(wèn),該類(lèi)的具體用法為:從django.contrib.auth.mixins模塊中引入LoginRequiredMxin,定義繼承LoginRequiredMxin類(lèi)的類(lèi)視圖,在其中設(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類(lèi)必須位于類(lèi)視圖基類(lèi)列表的最左側(cè)。此外,參數(shù)login_url與裝飾器login_required中參數(shù)login_url使用方式一致。

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!