Подтвердить что ты не робот

Колба: 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

4b9b3361

Ответ 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, если вам нужны отдельные обработчики ошибок, это имеет больше смысла.

Также я бы порекомендовал не использовать колбу, она использует глобальные переменные везде, что затрудняет управление вашим кодом, если он становится больше.