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-адрес маршрута для страницы входа.

Другие вопросы по тегам