Колба: error_handler для чертежей
Можно ли установить 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
Ответы
Ответ 1
Вы можете использовать метод 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
Ответ 2
Я тоже не мог получить наивысший рейтинг ответа на работу, но вот обходной путь.
Вы можете использовать catch-all в конце вашего Blueprint, не знаете, насколько он надежный/рекомендуемый, но он работает. Вы также можете добавлять разные сообщения об ошибках для разных методов.
@blueprint.route('/<path:path>')
def page_not_found(path):
return "Custom failure message"
Ответ 3
errorhandler
- это метод, унаследованный от Flask, а не Blueprint.
Если вы используете 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
Ответ 4
добавить обработку ошибок на уровне приложения с помощью прокси-объекта запроса:
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
Документация на колбу
Ответ 5
Flask не поддерживает обработчики ошибок уровня светокопии для ошибок 404 и 500. BluePrint - это утечка абстракции. Для этого лучше использовать новое приложение WSGI, если вам нужны отдельные обработчики ошибок, это имеет больше смысла.
Также я бы порекомендовал не использовать колбу, она использует глобальные переменные везде, что затрудняет управление вашим кодом, если он становится больше.