как работает декоратор пилонов - PullRequest
1 голос
/ 27 ноября 2009
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 Ответ

2 голосов
/ 27 ноября 2009

Как и любой другой декоратор работ -

Декоратор - это функция, которая получает функцию в качестве аргумента и возвращает другую функцию. Возвращенная функция «займет место» из исходной функции.

Поскольку желаемый эффект с decoratos обычно позволяет запускать некоторый код до и после запуска исходной функции (декорируемой), декораторы создают новую функцию, которая принимает любое количество анонимных и именованных параметров (* префикс «args» и ** префикс «kwargs» отвечают за сохранение параметров в списке и словаре соответственно)

Внутри этой новой функции у вас есть место для написания вашего кода подтверждения, а затем он вызывает исходную функцию, которая в этом контексте называется «func», и возвращает свое первоначальное значение.

вызов decorator.decorator строго не нужен: он jsut изменяет некоторые ttrbitues функции-обёртки, так что он кажется более близким к исходному funciton (например, атрибуту 'func_name') - но код должен работать без это.

После определения декоратора вы должны применить его к функции или методу, который вы хотите декорировать: просто поместите @allowed_roles в строку, предшествующую определению функции, которую вы хотите декорировать.

...