У меня используется Flask-приложение со следующей схемой реализации:
from app import create_app
if __name__ == "__main__":
app = create_app()
app.run(port = 8080, debug = True)
и для модуля app:
from flask import Flask, request, url_for
from flask_bootstrap import Bootstrap
from flask_peewee.db import Database
from flask_login import LoginManager
from config import Config
login = LoginManager()
login.login_view = 'auth.login'
login.login_message = 'Для входа в систему необходима авторизация'
bootstrap = Bootstrap()
def create_app(config_class=Config):
app = Flask(__name__)
app.config.from_object(config_class)
login.init_app(app)
bootstrap.init_app(app)
return app
Для алхимии, бутстрап и логин в этом случае всё просто: сначала объект объявляется и создаётся переменная, а затем выполняется инициализация с передачей объекта app.
Но flask_peewee.db должен быть инициализирован с параметрами сразу при создании. Я с одной стороны не могу его определить за пределами create_app, так как там нет ещё конфига. Но и внутри create_app определить переменную не могу, так как она умрёт по завершении функции. Как обойти эту проблему? В документации к peewee не нашёл двухстадийного определения.