Django開發(fā)中怎么給類視圖添加裝飾器

本篇內(nèi)容介紹了“Django開發(fā)中怎么給類視圖添加裝飾器”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

成都創(chuàng)新互聯(lián)是專業(yè)的橫縣網(wǎng)站建設(shè)公司,橫縣接單;提供成都做網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè),網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行橫縣網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!

場景:

Django 開發(fā)中,如果我們使用了類視圖,如:ListView、DetailView、UpdateView等,這時我們又想要對這個視圖添加一個裝飾器,來實現(xiàn)某種功能,這時候該怎么處理呢?

環(huán)境:

python 3.6

Django 1.11

錯誤用法

錯誤實現(xiàn)方式:

def is_login(func):    def wrapper(request,*args,**kwargs):    # 若檢測不到用戶就跳轉(zhuǎn)登錄頁面        if not request.session.get("user"):            return redirect(reverse('login'))        return  func(request,*args, **kwargs)    return wrapper
@is_loginclass myinfor(generic.ListView):    pass

報錯信息:

AttributeError: 'function' object has no attribute 'as_view'

正確用法 

實現(xiàn)方式一:

from django.utils.decorators import method_decorator

def is_login(func):    def wrapper(request,*args,**kwargs):    # 若檢測不到用戶就跳轉(zhuǎn)登錄頁面        if not request.session.get("user"):            return redirect(reverse('login'))        return  func(request,*args, **kwargs)    return wrapper
# 使用method_decorator將裝飾器包裹起來,同時,name參數(shù)是必須的,dispatch支持所有請求類型,包含get、post等,如果指定某種請求方式改為:name='get'. 教程源站(bigyoung.cn)
@method_decorator(is_login, name='dispatch')class myinfor(generic.ListView):    pass

實現(xiàn)方式二:

通過路由配置實現(xiàn):(不推薦)

'''教程源站:BigYoung.cn'''
from django.utils.decorators import never_cache
urlpatterns += [    path('myinfo/', never_cache(myinfor.as_view()), name='myinfo'),]

進階用法:

如果你有多個裝飾器需要裝飾,如下多個裝飾器:

def is_login(func):    def wrapper(request,*args,**kwargs):    # 若檢測不到用戶就跳轉(zhuǎn)登錄頁面        if not request.session.get("user"):            return redirect(reverse('login'))        return  func(request,*args, **kwargs)    return wrapper
def is_admin(func):    # 檢測是否為admin管理員。教程源站(bigyoung.cn)    def wrapper(request,*args,**kwargs):        pass    return wrapper

“Django開發(fā)中怎么給類視圖添加裝飾器”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

新聞標題:Django開發(fā)中怎么給類視圖添加裝飾器
URL鏈接:http://bm7419.com/article20/pceico.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、App設(shè)計、品牌網(wǎng)站設(shè)計、建站公司手機網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)