Inicjalizacja rozszerzeń za pomocą init_app
Odłóż powiązanie rozszerzeń do momentu utworzenia aplikacji.
Inicjalizacja rozszerzeń za pomocą init_app to bezpłatna lekcja Flask Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Flask Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Flask Academy zawiera 4 lekcji w sumie.
Części tej lekcji nie zostały jeszcze przetłumaczone i są wyświetlane po angielsku.
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. 🌟
Często zadawane pytania
Czy lekcja „Inicjalizacja rozszerzeń za pomocą init_app” jest bezpłatna?
Tak — pełny tekst „Inicjalizacja rozszerzeń za pomocą init_app” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Flask Academy, przejdź na CoddyKit PRO. Kurs Flask Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Inicjalizacja rozszerzeń za pomocą init_app”?
Odłóż powiązanie rozszerzeń do momentu utworzenia aplikacji. Ćwiczysz Flask Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Flask Academy?
Nie wymagamy żadnego doświadczenia. Flask Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Inicjalizacja rozszerzeń za pomocą init_app”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Flask Academy?
Tak. Każda lekcja Flask Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Problemy z globalnym obiektem app
- Pisanie funkcji create_app
- Inicjalizacja rozszerzeń za pomocą init_app
- Rejestrowanie Blueprintów w fabryce