Создание псевдонима для декораторов функций в Python

В Python функции-декораторы снова являются функциями, которые являются гражданами первого класса, что создает ожидание гибкого назначения и передачи. В приведенном ниже примере

def auth_token_not_expired(function):
    @auth_token_right
    def wrapper(req):
        # Some validations
        return function(req)
    return wrapper

Теперь я попытался присвоить эту функцию декоратора другой переменной в качестве псевдонима

login_required = auth_token_not_expired

После проверки назначение происходит успешно, однако, когда я вызываю его с помощью @login_required синтаксис это вызывает NameError

Exception Type: NameError
Exception Value:    
name 'login_required' is not defined

Как мы регистрируем это login_required переменная тоже как декоратор?

1 ответ

Решение

Вы находитесь в неправильной сфере.

Адаптируем пример из Как создать цепочку функциональных декораторов?

def makeitalic(fn):
    def wrapped():
        return "<i>" + fn() + "</i>"
    return wrapped

@makeitalic
def hello():
    return "hello world"

hello() ## returns <i>hello world</i>

Теперь сделайте задание:

mi = makeitalic

@mi
def helloit():
    return "hello world"

helloit() ## returns <i>hello world</i>
Другие вопросы по тегам