Метод app_errorhandler
Метод app_errorhandler применяется к объекту
Blueprint и регистрирует функцию-обработчик
для указанного кода ошибки на уровне всего
приложения, а не только текущего блюпринта.
Первым параметром передаётся код ошибки,
вторым - функция-обработчик.
Главное отличие от метода errorhandler
заключается в области действия: обработчики,
зарегистрированные через errorhandler,
срабатывают только для маршрутов данного
блюпринта. Метод app_errorhandler
распространяет обработчик на всё приложение,
включая маршруты, определённые вне блюпринта.
Синтаксис
@bp.app_errorhandler(code)
Пример
Давайте создадим блюпринт и зарегистрируем
в нём обработчик ошибки 404 через
app_errorhandler:
from flask import Flask, Blueprint
app = Flask(__name__)
bp = Blueprint('bp', __name__)
@bp.app_errorhandler(404)
def not_found(error):
return 'page not found'
@bp.route('/')
def index():
return 'hello'
app.register_blueprint(bp)
Теперь при обращении к несуществующему
адресу вернётся строка "page not found".
Пример
Проверим, что обработчик, зарегистрированный
через app_errorhandler, действует
и для маршрутов вне блюпринта:
from flask import Flask, Blueprint
app = Flask(__name__)
bp = Blueprint('bp', __name__)
@bp.app_errorhandler(500)
def server_error(error):
return 'server error'
@bp.route('/user')
def user():
return 'user page'
@app.route('/')
def index():
return 'hello'
app.register_blueprint(bp)
Обработчик ошибки 500 сработает для любого
маршрута приложения, в том числе для /,
определённого напрямую через app.route.
Пример
Зарегистрируем обработчик с использованием объекта ошибки для формирования ответа:
from flask import Flask, Blueprint
app = Flask(__name__)
bp = Blueprint('bp', __name__)
@bp.app_errorhandler(404)
def not_found(error):
return f'error: {error}', 404
@bp.route('/article')
def article():
return 'article page'
app.register_blueprint(bp)
Результат выполнения кода для адреса
/missing:
error: 404 Not Found
Смотрите также
-
метод
errorhandler,
который регистрирует обработчик в пределах блюпринта -
класс
Blueprint,
который создаёт блюпринт приложения -
метод
register,
который регистрирует блюпринт в приложении -
метод
before_request,
который выполняет функцию перед запросом