Flask-Principal. Лучшая практика обработки исключений, связанных с разрешением
Я новичок в написании фляги и в настоящее время использую flask-principal
как мой механизм авторизации. Когда пользователь пытается получить доступ к URL-адресу без необходимого разрешения, принципал фляги вызывает PermissionDenied
Исключение.
Это заставляет мою систему бросить 500 internal server
ошибка.
Как я могу поймать конкретное исключение и вместо этого перенаправить пользователя на страницу предупреждения? Если бы вы могли поделиться примером кода, это будет очень полезно.
1 ответ
Вы можете сказать Flask-Principal, что вместо этого вы хотите вызвать определенный код ошибки HTTP:
@app.route('/admin')
@admin_permission.require(http_exception=403)
def admin(request):
# ...
Сейчас flask.abort()
будет называться вместо повышения PermissionDenied
, Для кода ошибки 403 вы можете зарегистрировать обработчик ошибок:
@app.errorhandler(403)
def page_not_found(e):
session['redirected_from'] = request.url
return redirect(url_for('users.login'))
где url_for('users.login')
вернет URL-адрес маршрута для страницы входа.