flask:error_handler用于蓝图

时间:2012-10-07 12:29:08

标签: http-status-code-404 blueprint flask

可以为蓝图设置error_handler吗?

@blueprint.errorhandler(404)
def page_not_found(error):
    return 'This page does not exist', 404

编辑:

https://github.com/mitsuhiko/flask/blob/18413ed1bf08261acf6d40f8ba65a98ae586bb29/flask/blueprints.py

您可以指定应用范围和蓝图本地error_handler

6 个答案:

答案 0 :(得分:23)

您可以使用Blueprint.app_errorhandler这样的方法:

bp = Blueprint('errors', __name__)

@bp.app_errorhandler(404)
def handle_404(err):
    return render_template('404.html'), 404

@bp.app_errorhandler(500)
def handle_500(err):
    return render_template('500.html'), 500

答案 1 :(得分:4)

errorhandler是从Flask(不是Blueprint)继承的方法。 如果您使用的是蓝图,则等效为app_errorhandler

文档建议采用以下方法:

def app_errorhandler(self, code):
        """Like :meth:`Flask.errorhandler` but for a blueprint.  This
        handler is used for all requests, even if outside of the blueprint.
        """

因此,这应该起作用:

from flask import Blueprint, render_template

USER = Blueprint('user', __name__)

@USER.app_errorhandler(404)
def page_not_found(e):
    """ Return error 404 """
    return render_template('404.html'), 404

另一方面,虽然下面的方法对我没有引起任何错误,但它没有用:

from flask import Blueprint, render_template

USER = Blueprint('user', __name__)

@USER.errorhandler(404)
def page_not_found(e):
    """ Return error 404 """
    return render_template('404.html'), 404

答案 2 :(得分:2)

我也无法获得最高评价的答案,但这是一种解决方法。

您可以在蓝图的结束中使用全能,不确定它有多强大/推荐,但确实有效。您也可以为不同的方法添加不同的错误消息。

@blueprint.route('/<path:path>')
def page_not_found(path):
    return "Custom failure message"

答案 3 :(得分:0)

使用请求代理对象在应用程序级别添加错误处理:

from flask import request,jsonify

@app.errorhandler(404)
@app.errorhandler(405)
def _handle_api_error(ex):
if request.path.startswith('/api/'):
    return jsonify(ex)
else:
    return ex

flask Documentation

答案 4 :(得分:0)

让其他人惊讶的是,没有提到miguelgrinberg的出色教程。

https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-vii-error-handling

我找到了用于错误处理的哨兵框架(下面的链接)。似乎过于复杂。不确定阈值在哪里有用。

https://flask.palletsprojects.com/en/1.1.x/errorhandling/

https://docs.sentry.io/platforms/python/guides/flask/

答案 5 :(得分:-5)

Flask doesnt support blueprint level error handlers for 404 and 500 errors。 BluePrint是一个漏洞的抽象。为此更好地使用新的WSGI应用程序,如果您需要单独的错误处理程序,这更有意义。

另外我建议不要使用flask,它会在整个地方使用全局变量,这会使你的代码变得越来越难以管理。