Python如何合併多個裝飾器?教你幾個小技巧

來源:文萃谷 1.53W

django程序,需要寫很多api,每個函數都需要幾個裝飾器,例如

Python如何合併多個裝飾器?教你幾個小技巧

複製代碼 代碼如下:

@csrf_exempt

@require_POST

def foo(request):

pass

既然那麼多個方法都需要寫2個裝飾器,或者多個,有啥辦法把多個合併成一行呢?

上面的函數執行過程應該是

複製代碼 代碼如下:

csrf_exempt(require_POST(foo))

修改成

複製代碼 代碼如下:

def compose(*funs):

def deco(f):

for fun in reversed(funs):

f = fun(f)

return f

return deco

函數改寫成

複製代碼 代碼如下:

@compose(csrf_exempt, require_POST)

def foo(request):

pass

參考:

Can I combine two decorators into a single one in Python

熱門標籤