Я пытался сделать все возможное, чтобы заставить эту работу работать, и каждый метод не работает по разным причинам.
Я использую Flask-Login для управления пользователями. Я хочу сделать собственный декоратор, который позволит мне проверять роли пользователей. Я посмотрел на Реализация Flask-Login с несколькими классами пользователей , я не могу заставить его работать. Я также посмотрел на Декораторы с параметрами? и множество других ссылок, и независимо от того, что я делаю, я не могу соответствовать поведению, которое я нахожу в учебниках и ответах переполнения стека.
Итак, вот одна попытка:
def check_role(f):
@wraps(f)
def decorated_view(*args, **kwargs):
print(f)
return f(*args, **kwargs)
return decorated_view
Это работает и печатает название функции, которую я украсил, но она не принимает параметр "роли", для которого я проверяю. Если добавить это:
def check_role(f, a="test"):
@wraps(f)
def decorated_view(*args, **kwargs):
print(f)
return f(*args, **kwargs)
return decorated_view
, а затем использовать его с:
@bp.route('/topicManagement', methods=('GET', 'POST'))
@login_required
@check_role(a="foo")
Я получаю " TypeError: check_role () отсутствует 1 обязательный позиционный аргумент: 'f' ». Я пробовал каждую комбинацию, которую могу придумать, с помощью позиционных, необязательных аргументов, и я не могу обойти это. Функция не требует, чтобы я передавал «f» вручную в коде до тех пор, пока я не добавлю параметр таким же образом, как говорится в каждом учебном пособии, а затем прервет работу, потому что хочет получить функциональный параметр, но при попытке предоставить что-либо произойдет ошибкакак этот теперь внезапно обязательный параметр.
Итак, из Декораторов с параметрами? , я попытался сделать:
def check_role(a):
def bar(function):
def foo(*args, **kwargs):
print(a)
return function(*args, **kwargs)
return foo
return bar
Неважно, что я здесь делаю,независимо от имен или количества функций представления, которые я украсил, я всегда получаю одно и то же:
Невозможно создать URL для конечной точки ''. Вы имели в виду «вместо»?
Спасибо, переполнение стека, ты моя единственная надежда.