国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

django限制匿名用戶訪問及重定向的方法實例

2020-02-22 23:09:02
字體:
來源:轉載
供稿:網友

前言

大家應該都遇到過,在某些頁面中,我們不希望匿名用戶能夠訪問,例如個人頁面等,這種頁面只允許已經登錄的用戶去訪問,在django中,我們也有比較多的方式去實現。

最簡單的,我們在viewz中去判斷用戶is_authenticated,但這種方法也相對比較笨拙,最理想的的我們當然不希望這個請求能夠進入到我們view,在這之前就能夠返回一個相關的response,而django其實已經給我們封裝好了相關的函數與類。下面話不多說了,來一起看看詳細的介紹吧。

基于fbv模式的login_required裝飾器

def login_required(function=None, redirect_field_name=REDIRECT_FIELD_NAME,    login_url=None): # 實際上這個方法也是調用is_authenticated去判斷 pass

使用方法也很簡單:

# fbv模式from django.contrib.auth.decorators import login_required@login_required def user_info_view(request): # 用戶個人界面 pass

那么,我們希望如果是匿名用戶在訪問這個界面后能夠重定向到login界面,我們可以設置相關參數,login_required裝飾器會默認去讀取settings.LOGIN_URL,并重定向到這個頁面,如果希望更為靈活,那么我們也可以給裝飾器傳相關參數。

# fbv模式@login_required(login_url='/login/', redirect_field_name='next')def user_info_view(request): # 用戶個人界面 pass

login_url就是匿名用戶訪問后重定向的url,一般都是login的頁面

redirect_field_name是一個get請求的參數

假設當前頁面會/user/info/

那么重定向的url為: /login/?next=/user/info/

這個參數可以用于登陸后直接跳轉回這個頁面,后面還會具體介紹!

基于cbv的LoginRequiredMixin類

博主一般常用都是cbv模式,在這個模式下,我們會重寫get和post方法,理論上可以用login_required裝飾器去裝飾這兩個方法

# cbv模式from django.contrib.auth.decorators import login_requiredfrom django.utils.decorators import method_decoratorclass UserInfoView(View): @method_decorator(login_required(login_url='/login/', redirect_field_name='next')) def get(self, request): # 獲取用戶個人界面  pass

login_required是函數裝飾器,method_decorator可以將函數裝飾器轉化成方法裝飾器。如果這里還有post請求,那這樣的代碼我們還要在寫一遍,這樣就顯得有點冗余,我們既然用了類來實現,當然通過類的優勢來實現!繼承LoginRequiredMixin!

from django.contrib.auth.mixins import LoginRequiredMixinclass UserInfoView(LoginRequiredMixin, View): def get(self, request): # 獲取用戶個人界面  pass

那么,LoginRequiredMixin是怎么去實現的呢?

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乌拉特后旗| 江阴市| 安平县| 荔波县| 丰城市| 隆回县| 宁阳县| 旬阳县| 上思县| 盐津县| 南开区| 东兴市| 新建县| 辉县市| 商丘市| 肇东市| 安宁市| 保定市| 红安县| 三都| 金湖县| 海晏县| 赤壁市| 六枝特区| 克什克腾旗| 长葛市| 徐闻县| 襄城县| 香河县| 革吉县| 巴南区| 金阳县| 宜黄县| 万载县| 柏乡县| 丹寨县| 枣庄市| 鹿邑县| 岳西县| 芜湖市| 乌拉特前旗|