裝飾器的作用(簡而言之):讓其他函數在不需要做任何代碼變動的前提下增加額外的功能
FBV加裝飾器
例:以統計時間的裝飾器為例
def timer(func):
def inner(*args, **kwargs):
start = time.time()
ret = func(*args, **kwargs)
print('執行的時間是:{}'.format(time.time()-start))
return ret
return inner
其中:timer為裝飾器的名字(讀者可自定義);func為需要被裝飾的函數名字(一般寫這個);inner也是自定義,但習慣寫inner;*args, **kwargs為要被裝飾的函數參數。
使用方式:
@timer
def xx(request):
....
即:在需要的方法上加 @timer即可。
CBV加裝飾器(共有3種方法,這里本人只列舉其中2種方法,但是夠了)
注:這里需要再使用一個裝飾器(不加也沒關系,但是最好還是加上去)
from django.utils.decorators import method_decorator
例:還是以 統計時間的裝飾器 為例
方法一:
class Xxx(View):
@method_decorator(timer)
def xx(self, request):
....
注:方法一比較簡單,只需在定義函數上面加上 @method_decorator(timer) 即可
方法二:
@method_decorator(timer, name='xx')
class Xxx(View):
def xx(self, request):
....
注:方法二也不難,在類的上面加上 @method_decorator(timer, name='xx') 即可,其中 name='xx' 中的 'xx' 為讀者自定的方法名。
望讀者細心閱之。