Python Flask - Обработка ошибок с чертежами - PullRequest
0 голосов
/ 06 ноября 2019

Я использую колбу, и у меня есть свои пакеты по функциям, и я использую синие отпечатки, и это прекрасно работает, но я хотел бы иметь глобальную страницу 404 и страницу ошибок, которая находится вне какого-либо конкретного пакета функций.

Когда я запускаю колбу 404, она обрабатывается с помощью обработчика по умолчанию 404, и я не получаю свой собственный шаблон. Ниже приведен мой код:

init .py

# Define the WSGI application object
app = Flask(__name__)

# Load Configuration
app.config.from_object('config')

from .user.route import mod_user as user_module
from .route.error_handler import mod_error as error_module

# Register blueprints
app.register_blueprint(user_module)
app.register_blueprint(error_module)

error_handler.py

import traceback

from flask import Flask, render_template, Blueprint

mod_error = Blueprint('error', __name__, template_folder='templates')


@mod_error.errorhandler(404)
def not_found(e):
    print(e)
    return render_template('404.html')


@mod_error.errorhandler(Exception)
def general_error(e):
    print(e)
    print(traceback.format_exc())
    return render_template('error.html')

Мои маршруты функций определены в project.user.route.py

Глобальный маршрут \ обработчик ошибок находится в project.route.error_handler.py

Глобальные шаблоны ошибок находятся в project.templates

1 Ответ

0 голосов
/ 08 ноября 2019

Мне удалось это решить, и это довольно просто, когда я перешел от всего в одном скрипте к использованию чертежей и создал модуль обработки ошибок, который, как мне показалось, мне нужно было использовать в названии модуля в имени:

@mod_error.errorhandler(404)

Причина этого заключается в том, что именно так я и сделал в своем контроллере для своей пользовательской функции:

@mod_user.route('/read', methods=['POST', 'GET'])

Ниже приведено то, что янеобходимо сделать, то есть импортировать объект моего приложения, а затем использовать его для функций обработчика ошибок:

import traceback

from flask import Flask, render_template, Blueprint
from .. import app

mod_error = Blueprint('error', __name__, template_folder='templates')


@app.errorhandler(404)
def not_found(e):
    print(e)
    return render_template('404.html')


@app.errorhandler(Exception)
def general_exception(e):
    print(e)
    print(traceback.format_exc())
    return render_template('error.html')

Теперь это обрабатывает все ошибки на глобальном уровне вне любого из моих пакетов функций, которых я хотел достичьэффект ControllerAdvice, который обрабатывает все исключения для всех контроллеров в Spring MVC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...