我有基于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