可以为蓝图设置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
答案 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
答案 4 :(得分:0)
让其他人惊讶的是,没有提到miguelgrinberg的出色教程。
https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-vii-error-handling
我找到了用于错误处理的哨兵框架(下面的链接)。似乎过于复杂。不确定阈值在哪里有用。
答案 5 :(得分:-5)
Flask doesnt support blueprint level error handlers for 404 and 500 errors。 BluePrint是一个漏洞的抽象。为此更好地使用新的WSGI应用程序,如果您需要单独的错误处理程序,这更有意义。
另外我建议不要使用flask,它会在整个地方使用全局变量,这会使你的代码变得越来越难以管理。