Повторное использование стандартного кода в колбах
У меня есть некоторые ошибки обработки вызовов во многих моих приложениях колбу. Например, мой 404 ответ определяется с помощью @app.errorhandler
декоратор:
@app.errorhandler(404)
def page_not_found(e):
return jsonify({'status': 'error',
'reason': '''There's no API call for %s''' % request.base_url,
'code': 404}), 404
Поскольку у меня есть значительный объем стандартного кода, я хотел бы поместить его в общий файл и наследовать или импортировать мое приложение-колбу из одного места.
Можно ли унаследовать или импортировать код шаблона колбы из другого модуля?
1 ответ
Конечно, есть, но вам нужно параметризовать регистрации.
Вместо использования декораторов перенесите регистрацию в функцию:
def page_not_found(e):
return jsonify({'status': 'error',
'reason': '''There's no API call for %s''' % request.base_url,
'code': 404}), 404
def register_all(app):
app.register_error_handler(404, page_not_found)
затем импортировать register_all
и позвони со своим Flask()
объект.
Это использует Flask.register_error_handler()
функция вместо декоратора.
Чтобы поддерживать чертежи, вам нужно дождаться следующего выпуска Flask (в том числе этот коммит) или напрямую использовать функцию декоратора:
app_or_blueprint.errorhandler(404)(page_not_found)
Для многих из этих задач вы также можете использовать Blueprint при условии, что вы используете Blueprint.app_errorhandler()
:
common_errors = Blueprint('common_errors')
@common_errors.errorhandler(404)
def page_not_found(e):
return jsonify({'status': 'error',
'reason': '''There's no API call for %s''' % request.base_url,
'code': 404}), 404
Blueprint может обрабатывать не все, но если все, что вы регистрируете, это обработчики ошибок, Blueprint - хороший подход.
Импортируйте проект как обычно и зарегистрируйте его в своем приложении:
from yourmodule import common_errors
app.register_blueprint(common_errors)