Inicialice extensiones con init_app
Posponga la vinculación de extensiones hasta crear la aplicación.
Inicialice extensiones con init_app es una lección gratuita de Flask Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Flask Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Flask Academy incluye 4 lecciones en total.
Partes de esta lección aún no han sido traducidas y se muestran en inglés.
The Extension Dilemma
Extensions like SQLAlchemy used to take the app right away. Inside a factory that does not work, because the app does not exist at import time yet. 🤔
Create Without an App
The fix is two steps. First, create the extension object at module level with no app passed in. It stays unbound for now.
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy() # no app yetBind It Later
Second, call init_app inside the factory once the app is built. This binds the extension to that specific instance.
def create_app():
app = Flask(__name__)
db.init_app(app)
return appWhy Two Steps
The extension object can be imported anywhere as a global, while the actual binding waits until the factory chooses a config. Best of both worlds.
Importable Everywhere
Because db lives at module level, your models and views import it freely without touching the app, avoiding circular imports.
from app.extensions import dbA Tidy extensions Module
A common pattern keeps all unbound extensions in one extensions.py file, then the factory imports and inits each one.
db = SQLAlchemy()
migrate = Migrate()
login = LoginManager()Init Many at Once
Inside create_app you simply call init_app on each extension, passing the same fresh app to all of them.
db.init_app(app)
migrate.init_app(app, db)
login.init_app(app)Per-App Binding
Because binding happens in the factory, two different apps can each init_app the same extension class independently. Great for tests.
Config Is Read at Init
Extensions read settings like the database URI during init_app, so set those config values before you bind them.
app.config["SQLALCHEMY_DATABASE_URI"] = uri
db.init_app(app)Use It Within a Context
After init_app, the extension needs an app context to actually run queries, since it must know which app it is talking to.
with app.app_context():
db.create_all()The Golden Rule
Create the extension unbound at import, then call init_app in the factory. That single split unlocks the whole pattern. 🔑
Quick Check
Why create an extension object without an app, then call init_app?
Recap
You learned the two-step move: build extensions unbound, then call init_app in the factory. Importable globals plus per-app binding, with no circular imports. 🌟
Preguntas frecuentes
¿La lección «Inicialice extensiones con init_app» es gratis?
Sí — el texto completo de «Inicialice extensiones con init_app» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Flask Academy, actualiza a CoddyKit PRO. El curso de Flask Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Inicialice extensiones con init_app»?
Posponga la vinculación de extensiones hasta crear la aplicación. Practicas Flask Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Flask Academy?
No se requiere experiencia previa. Flask Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Inicialice extensiones con init_app»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Flask Academy?
Sí. Cada lección de Flask Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Problemas con un objeto app global
- Escriba una función create_app
- Inicialice extensiones con init_app
- Registre Blueprints en la factoría