您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“Django開發(fā)中怎么給類視圖添加裝飾器”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!
Django 開發(fā)中,如果我們使用了類視圖,如:ListView、DetailView、UpdateView
等,這時我們又想要對這個視圖添加一個裝飾器,來實現(xiàn)某種功能,這時候該怎么處理呢?
python 3.6
Django 1.11
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_login
class myinfor(generic.ListView):
pass
AttributeError: 'function' object has no attribute 'as_view'
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):(不推薦)
'''教程源站: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)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。