Python如何合併多個裝飾器?教你幾個小技巧
來源:文萃谷 1.53W
django程序,需要寫很多api,每個函數都需要幾個裝飾器,例如
複製代碼 代碼如下:
@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