1
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)

谁能解释它是如何工作的?

4

1 回答 1

2

像任何其他装饰工一样 -

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

由于使用装饰器的预期效果通常是能够在原始函数(被装饰的函数)运行之前和之后运行一些代码,因此装饰器创建一个新函数,该函数接受任意数量的匿名和命名参数(* 前缀“args " 和前缀 "kwargs" 的**分别负责将参数存储在列表和字典中)

在这个新函数中,您有一个地方可以编写验证码——然后它调用原始函数——在这种情况下称为“func”,并返回其原始值。

“decorator.decorator”调用不是严格需要的:它只是修改了包装函数的一些 ttrbitues,使其看起来更接近原始函数(如 'func_name' 属性) - 但代码应该在没有它的情况下工作。

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

于 2009-11-27T12:09:30.727 回答