這篇文章主要介紹了Python合並多個裝飾器小技巧,本文用改寫調用函數的方式實現把多個裝飾器合並成一行、一個函數來調用,需要的朋友可以參考下
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