Структура фляжных приложений
Я пытаюсь создать простое, но не тривиальное приложение с Flask, и я постоянно сталкиваюсь с ситуацией, которая не очень хорошо объясняется в документах.
Я хочу, чтобы мое приложение было разделено между различными модулями, но трудно получить доступ к основному объекту app
(или db
from flask-sqlalchemy
) из любого другого места, кроме основного модуля. Похоже, вы должны действительно написать свой собственный способ рассматривать его как глобальный, к которому все имеет доступ, что требует некоторого сомнительного кода и немного времени.
Оба app
и db
создаются на уровне, где создается основное приложение, и в каждом примере предполагается, что они доступны на верхнем уровне. Но если я разделяю разные обработчики URL-адресов на разные модули, я теряю способность использовать @app.route
decorator. Я могу обойти это с помощью app.add_url_rule('/...', some.module...)
, но опять же приложение не будет передано этой функции.
То же самое происходит с db
- я не знаю, должен ли я вставлять его в g
или сделать его доступным через app
каким-то образом. Это не помогает мне перемещать модели в отдельный модуль - как я могу получить доступ к db
при импорте? Все примеры снова предполагают, что он доступен только как локальная переменная.
Я пропустил что-то очевидное, или я пытаюсь использовать колбу для неправильной задачи здесь?
Ответы
Ответ 1
Ответ на ваш вопрос - это чертежи. Фактически, если вы посмотрите на документацию, то упоминается, что чертежи там, чтобы включить разделение приложения в модулях.
Пример кода:
from flask import Blueprint
mod = Blueprint(blueprint_name, __name__, template_folder="folder_name"
static_folder="folder_name")
@mod.route('/mymodule')
def view():
# your code
В app.py
from yourmodule import mod
app.register_blueprint(mod)
Это правильный способ разделить приложение на модули. Ознакомьтесь с документами для более подробной информации.
Кроме того, если вам требуется доступ к приложению в любом другом модуле, вы должны использовать current_app
прокси приложения.
from flask import current_app
Ознакомьтесь с этим документом, который поможет разделить приложение фляги на модули для больших проектов создателем колбы.
Ответ 2
Вы видели новую blueprints
функцию (я еще не использовал ее, но похоже, что это может быть полезно в вашем случае).