Я построил оболочку функции, используя метод this:
def parametrized(dec):
def layer(*args, **kwargs):
def repl(f):
return dec(f, *args, **kwargs)
return repl
return layer
@parametrized
def role_required(f, roles):
print(roles)
def decorated_function(*args, **kwargs):
print('in dec func') # never called
auth_mod_used = 'auth' in app.blueprints.keys()
if auth_mod_used:
print(g.user.role.lower())
print(g.user.role.lower() in (role.lower for role in roles))
if g.user is None or g.user.role.lower() not in (role.lower for role in roles):
flash('You are not authorized to preform this action.', 'danger')
# TODO: log to logging service
return redirect(url_for('home.index'))
return f(*args, **kwargs)
return f(*args, **kwargs)
return decorated_function
Он предназначен для защиты маршрута, позволяя только определенным ролям пройти. Я пытаюсь использовать его таким образом:
@mod_lp.route('/add', methods=['POST'])
@role_required(['admin', 'principal'])
def add():
form = LessonPlanForm()
if form.validate_on_submit():
lp = LessonPlan(form.name.data, form.class_day.data)
db.session.add(lp)
db.session.commit()
return redirect(url_for('lesson_plan.index'))
ошибка:
Не удалось создать url для конечной точки lesson_plan.add