#python #flask
#python #flask
Вопрос:
Я новичок в Flask и пытаюсь использовать декоратор для установки номера категории (от 1 до 5) для различных конечных точек. Набор значений должен быть доступен для функции ведения журнала, которую я определил и украсил с помощью @bp.after_request проекта.after_request
Я хочу, чтобы мои конечные точки выглядели так:
@category(3)
@bp.route("/user")
def get_list_of_users():
pass
Моей первоначальной мыслью было использовать глобальный контекст flask (g). Чтобы установить значение g.category из декоратора, а затем прочитать его обратно из функции ведения журнала.
Я закодировал декоратор следующим образом:
def category(cat):
def decorator(f):
g.category = cat
return f
return decorator
Но я получаю эту ошибку:
Exception has occurred: RuntimeError
Working outside of application context.
Я даже не уверен, является ли это хорошим / стандартным подходом к тому, что я пытаюсь сделать. Любая помощь или предложения будут очень признательны.
Ответ №1:
Вы могли бы использовать одно более глубокое определение:
def category(cat):
"This function wraps original handler and takes category number into context"
def decorator(f):
"This function gets called during definition with original handler as f"
def _f(*args,**kwargs):
"This function gets called as your route handler would (by Flask)"
g.category = cat
return f(*args,**kwargs) # it calls the original function, passing args
return _f
return decorator
Комментарии:
1. Ты победил меня.. Я только что разобрался с этим, но мое решение использовало @wraps. Я предпочитаю ваш. Спасибо!