Я не могу понять, как заставить декоратор Python работать в режиме Flask.
Вот мой декоратор:
from functools import wraps
def admin_only(func):
@wraps(func)
def wrapper(*args, **kwargs):
print("It did something")
if current_user.is_anonymous:
flash("Please log in to use this site.", "info")
return redirect(url_for('login'))
if not current_user.admin:
abort(403)
return func(*args, **kwargs)
return wrapper
@bp.errorhandler(403)
def forbidden_403(exception):
return 'Admin access only', 403
А вот мой взгляд:
@bp.route('/add_info', methods=['GET', 'POST'])
@admin_only
def add_info():
add_info_form = AddInfoForm()
if add_info_form.validate_on_submit():
print("Code here")
else:
for error in add_info_form.errors:
flash(error, "info")
context = {
'add_info_form': add_info_form,
}
return render_template('admin/add_info.html', **context)
Декоратор просто не работает - представление работает, но пропускает любого пользователя. Ни один код, который должен быть реализован до запуска функции представления, не запускается. Я пробовал разные приемы форматирования, но ничего не получалось.
Я использовал код из этого ответа - Python декоратор с Flask:
def decorator(take_a_function):
def wrapper1(take_a_function):
def wrapper2(*takes_multiple_arguments):
# do stuff
return take_a_function(*takes_multiple_arguments)
return wrapper2
return wrapper1
Кажется, ничего не работает. Чего мне не хватает?
Заранее спасибо.