CBV加裝飾器
阿新 • • 發佈:2022-03-10
CBV加裝飾器
我們知道在函式上如何加裝飾器,那麼在類上如何加裝飾器呢?
下面寫一個登入校驗示例:
匯入: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加 class Index(View): # @method_decorator(auth) def get(self, request, *args, **kwargs): return HttpResponse('index') def post(self, request, *args, **kwargs): 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引數