CBV加裝飾器

2022-10-08 19:18:13 字數 1198 閱讀 9871

我們知道在函式上如何加裝飾器,那麼在類上如何加裝飾器呢?

下面寫乙個登入校驗示例:

匯入:from django.utils.decorators import method_decorator

'''裝飾器'''

def auth(func):

def inner(request,*args, **kwargs):

#登入校驗

if request.session.get('is_login'): # 通過獲取is_login來判斷是否登入

res = func(*args, **kwargs) # 裝飾器核心,接收引數,返回值

return res

else:

return redirect('/login') # 校驗成功重定向到login

return inner # 必須返回inner

from django.views import view

from django.utils.decorators import method_decorator

@method_decorator(auth,name='get') #給get請求加裝飾器,還可以給post加

return httpresponse('post_index')

總結

1-cbv加裝飾器可以加在類上:

@method_decorator(auth,name='post') # 給post請求加裝飾器

2-可以加在方法上:

@method_decorator(auth)

def get(self, request, *args, **kwargs):

pass

區別是加在post或者get方法上不需要寫name引數,如果加在檢視類上需要寫name引數

給CBV加裝飾器

裝飾器def 在django中給cbv加裝飾器需要匯入模組 from django.utils.decoreation import method decorator 先要有個類作位 主頁,必須登入才能訪問 cbv class home view defget self,request pass d...

django CBV加裝飾器

cbv class base view 基於session實現的裝飾器 登入了就給session設定值 生成隨機序列 然後存入資料庫,並將一串隨機序列鍵值對返回給瀏覽器端,若未登入則跳轉到登入頁面。def login auth func wraps func def inner request,ar...

python中裝飾器之疊加裝飾器(二)

當乙個函式疊加了多個裝飾器後,程式會如何執行呢?疊加裝飾器 在同乙個被裝飾物件中,新增多個裝飾器,並執行。裝飾1 裝飾2 裝飾3 def被裝飾物件 pass注意 裝飾器在呼叫被裝飾物件時才會執行新增的功能。裝飾的順序 由下到上 被包裹 執行的順序 由上倒下 貫穿 def def inner1 arg...