aplicación/ inicio .py:
from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__ name __) db = SQLAlchemy(app) from app import views, modelsaplicación/modelos.py:
from app import db # I want to avoid this everywhereRealmente no me gusta que mis submódulos dependan de su padre. ¿También se pueden evitar las variables del paquete global? Quiero una solución más orientada a objetos.
Creo que una alternativa para la aplicación es usar Blueprints, pero luego pierdo el decorador de ruta. Además, no se puede hacer lo mismo para db con SQLAlchemy (¿o sí?).
Eche un vistazo a este proyecto: https://github.com/sloria/cookiecutter-flask
Es un gran ejemplo para hacer las cosas de la manera correcta. Se utilizan muchas de las excelentes características de Flask: planos, fábricas de aplicaciones y más.
Así es como registran extensiones, como SQLAlchemy Database:
# app/extensions.py from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() ... # app/app.py from app.extensions import db def create_app(config_object=ProdConfig): app = Flask(__name__.split('.')[0]) app.config.from_object(config_object) register_extensions(app) ... def register_extensions(app): db.init_app(app) ...Intenta usar el 3er. Creamos el archivo exts.py para instanciar SQLAlchemy así:
from flask_sqlalchemy import SQLAlchemy from flask_xxx import xxx db = SQLAlchemy() ... from flask import Flask from .exts import db, ... def register_extensions(app): db.init_app(app) ... def create_app(config): app = Flask(__ name __) app.config.from_object(config) register_extensions(app) return app app = create_app(config) from .exts import db class XXXModel(db.Model): pass