[英]How to apply either of two decorators to a view
我有兩個裝飾器函數authenticate
和authenticate_remote
。 此時,我必須以這種方式依次使用它們:
@authenticate
def view_local(request):
...
@authenticate_remote
def view_remote(request):
...
其中view_local
和view_remote
具有完全相同的代碼。 我想要的是這樣的:
@authenticate or @authenticate_remote
def view_one(request):
...
在這種情況下,我不必復制太多的粘貼內容,而在這里和那里克隆相似的代碼。
這是我會做的:
def view_one(request):
# common code
view_local = authenticate(view_one)
view_remote = authenticate_remote(view_one)
它很簡單,明確,並且使邏輯不包含在urls
模塊中。
裝飾器是可調用的函數,它們接受一個函數並經常返回相同的函數。 因此,不幸的是,您無法對裝飾器執行布爾操作。
話雖如此,有一些可能的事情可以做:
您可以在urls.py
使用表示法authenticate(view_one)
和authenticate_remote(view_one)
(也請@jonrsharpe評論)。
如果由於某種原因對我來說不深,您有一些復雜的urls.py
,但您不能這樣做,則可以繼續使用帶有修飾符的兩個函數,兩個都指向具有通用代碼的第三個函數,從而避免重復:
@authenticate def view_local(request): view_one(request) @authenticate_remote def view_remote(request): view_one(request) def view_one(request): # common code
最后,您始終可以提供自己的裝飾器,該裝飾器在提供的函數上同時使用其他兩個裝飾器,然后在view_one
上使用該裝飾器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.