2013-11-19 5 views
6
.

. Я новичок в письменной колбе и в настоящее время использую flask-principal как мой механизм авторизации. Когда пользователь пытается получить доступ к URL-адресу без необходимого разрешения, флаг-рейз вызывает PermissionDenied Исключение.Лучшая практика обработки флаконов. Прекращение использования.

Это заставляет мою систему выбросить ошибку 500 internal server.

Как я могу поймать конкретное исключение и перенаправить пользователя на страницу предупреждения? Если бы вы могли поделиться примером кода, это будет очень полезно.

ответ

8

Вы можете сказать колбовую Principal, что вы хотите поднять конкретный код ошибки HTTP вместо:

@app.route('/admin') 
@admin_permission.require(http_exception=403) 
def admin(request): 
    # ... 

Теперь flask.abort() будет называться вместо повышения PermissionDenied. Для кода 403 ошибок вы можете зарегистрировать error handler:

@app.errorhandler(403) 
def page_not_found(e): 
    session['redirected_from'] = request.url 
    return redirect(url_for('users.login')) 

где url_for('users.login') будет возвращать URL маршрута на страницу входа в систему.