我有基於OpenID提供程序的登錄系統,我想創建類似@login_required的裝飾器。但我有一個問題 - 我需要檢查每個對象的許可。我將id傳遞給了我的視圖,所以我想知道是否有任何方法將它傳遞給裝飾器,或者這是不可能的,我需要在我的視圖中檢查用戶權限。有沒有辦法將變量傳遞給裝飾器?
1
A
回答
3
def outer(var1, var2):
def inner(func)
func.foo = var1
func.bar = var2
return func
return inner
@outer(myvar1, myvar2)
def myfunc():
# whatever
pass
雖然你不能直接傳遞變量到你的裝飾功能的功能,你可以創建另一個函數(outer
),調用它時,返回裝飾功能(inner
)。您通過outer
函數變量,它們可用於inner
函數。這被稱爲封閉。
3
取決於當你需要做的東西,你可能需要包裝的兩個級別的ID,你有什麼是你需要做的的方法被調用之前更換print(permission_id)
上:
def login_required(permission_id):
def decorator(func):
def method(self, *args, **kw):
print(permission_id)
return func(self, *args, **kw)
return method
return decorator
class foo(object):
@login_required('foo')
def bar(self):
print('bar')
foo = foo()
print('instantiated')
foo.bar()
輸出:
instantiated
foo
bar
+0
也許最有趣的事情是定義的函數「方法」是一個**真正的方法**。自引用的行爲與預期相同,暴露了一個活的對象來玩。 –
相關問題
- 1. 將變量傳遞給viewScript裝飾器
- 2. 有沒有辦法將一個變量傳遞給keypressed函數?
- 3. 有沒有辦法將變量傳遞給IDENT_CURRENT?
- 4. 有沒有辦法將變量傳遞給jQ .attr或.css?
- 5. 有沒有辦法在angularjs中將變量傳遞給模板?
- 6. 有沒有辦法將變量傳遞給Jinja2父母?
- 7. 有沒有辦法將變量傳遞到流星模板中?
- 8. 有沒有辦法將變量傳遞給Django中的通用視圖?
- 9. 有沒有辦法將螞蟻變量傳遞給java代碼(android)?
- 10. 有沒有辦法在Apache Storm中將一個變量從Bolt傳遞給Spout?
- 11. 有沒有辦法將變量傳遞給HTML表單提交中的URL?
- 12. 有沒有辦法通過url將變量傳遞給aspx文件?
- 13. 文字裝飾+ Python - 有沒有辦法?
- 14. 將參數傳遞給裝飾器?
- 15. 將參數傳遞給裝飾器
- 16. 有沒有辦法將Handlebars局部變量(包含變量)傳遞給另一個幫助器?
- 17. 將參數傳遞給裝飾器的類方法將被裝飾
- 18. 有沒有辦法將參數傳遞給pkg
- 19. 有沒有辦法將參數傳遞給is運算符?
- 20. 有沒有辦法將Runnable(或Callable)傳遞給IntentService?
- 21. 有沒有辦法將參數傳遞給ant任務命令?
- 22. 有沒有辦法將參數傳遞給NATURAL子例程?
- 23. 有沒有辦法將html/css選項傳遞給rails_admin輸入?
- 24. 有沒有辦法將一個值傳遞給GM_xmlhttprequest?
- 25. 有沒有辦法將'missing'對象傳遞給.append()
- 26. 有沒有辦法將WebElement傳遞給Robot中的javascript?
- 27. 有沒有辦法將查詢傳遞給PHP函數
- 28. 有沒有辦法將ServletRequest參數傳遞給JavaScript?
- 29. 有沒有辦法將參數傳遞給Chrome擴展?
- 30. 有沒有辦法將參數傳遞給setter
可能的重複[Understanding Python decorators](http://stackoverflow.com/questions/739654/understanding-python-decorators)。這是一箇舊帖子,但它有很多很好的信息。 –
是的,謝謝,我正在尋找Django裝飾器,所以錯過了這篇文章。它真的幫助我。 – Lertmind