pylons装饰器如何工作

时间:2009-11-27 09:50:53

标签: python pylons

from decorator import decorator
from pylons.decorators.util import get_pylons

def allowed_roles(roles):
    def wrapper(func, *args, **kwargs):
        session = get_pylons(args).session
        # edit pylons session here.
        return func(*args, **kwargs)
    return decorator(wrapper)

任何人都可以解释它是如何运作的吗?

1 个答案:

答案 0 :(得分:2)

像任何其他装饰工作一样 -

装饰器是一个函数,它接收函数作为参数,并返回另一个函数。 返回的函数将从原始函数“取代”。

由于decoratos所需的效果通常能够在原始函数(正在装饰的那个)之前和之后运行一些代码,装饰器会创建一个新函数,它接受任意数量的匿名和命名参数(*前缀“args”和**前缀“kwargs”负责将参数分别存储在列表和字典中。

在这个新函数中,您可以编写验证码 - 然后调用原始函数 - 在此上下文中称为“func”,并返回其原始值。

不严格需要“decorator.decorator”调用:它会修改包装函数的一些ttrbitues,使其看起来更接近于原始函数(如'func_name'属性) - 但代码应该无需工作它

在定义装饰器之后,你必须将它应用于你想要装饰的函数或方法:只需将@allowed_roles放在前缀你要装饰的函数定义的行中。

相关问题