1. 程式人生 > 其它 >CBV加裝飾器

CBV加裝飾器

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引數