Initiera tillägg med init_app
Skjut upp bindningen av tillägg tills appen skapas.
Initiera tillägg med init_app är en gratis lektion i Flask Academy på CoddyKit. Detta är lektion 3 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Flask Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Flask Academy innehåller totalt 4 lektioner.
Utmaningen med tillägg
Tillägg som SQLAlchemy brukade ta emot appen direkt. Inuti en fabrik fungerar det inte, eftersom app ännu inte finns när modulen importeras. 🤔
Skapa utan en app
Lösningen består av två steg. Skapa först tilläggsobjektet på modulnivå utan att skicka med någon app. Det förblir obundet tills vidare.
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy() # no app yetBind senare
Anropa sedan init_app inuti fabriken när appen har byggts. Då binds tillägget till just den instansen.
def create_app():
app = Flask(__name__)
db.init_app(app)
return appVarför två steg
Tilläggsobjektet kan importeras var som helst som en global variabel, medan den faktiska bindningen väntar tills fabriken har valt en konfiguration. Det bästa av två världar.
Importerbar överallt
Eftersom db finns på modulnivå kan dina modeller och vyer importera den fritt utan att röra appen, vilket undviker cirkulära importer.
from app.extensions import dbEn välordnad extensions-modul
Ett vanligt mönster samlar alla obundna tillägg i en extensions.py-fil. Därefter importerar fabriken varje tillägg och initierar det.
db = SQLAlchemy()
migrate = Migrate()
login = LoginManager()Initiera många samtidigt
Inuti create_app anropar du helt enkelt init_app på varje tillägg och skickar samma nya app till dem alla.
db.init_app(app)
migrate.init_app(app, db)
login.init_app(app)Bindning per app
Eftersom bindningen sker i fabriken kan två olika appar var och en anropa init_app på samma tilläggsklass, oberoende av varandra. Utmärkt för tester.
Konfigurationen läses vid initiering
Tillägg läser inställningar som databasens URI under init_app, så ange dessa konfigurationsvärden innan du binder dem.
app.config["SQLALCHEMY_DATABASE_URI"] = uri
db.init_app(app)Använd det i en kontext
Efter init_app behöver tillägget en app context för att faktiskt köra frågor, eftersom det måste veta vilken app det kommunicerar med.
with app.app_context():
db.create_all()Den gyllene regeln
Skapa tillägget obundet vid import och anropa sedan init_app i fabriken. Denna enda uppdelning möjliggör hela mönstret. 🔑
Snabb kontroll
Varför skapar man ett tilläggsobjekt utan en app och anropar sedan init_app?
Sammanfattning
Du lärde dig stegen: bygg tillägg obundna och anropa sedan init_app i fabriken. Importerbara globala objekt kombineras med bindning per app, utan cirkulära importer. 🌟
Lär dig Python med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 30
- Lektioner
- 120
Vanliga frågor
Är lektionen ”Initiera tillägg med init_app” gratis?
Ja – hela texten till ”Initiera tillägg med init_app” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Flask Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Flask Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Initiera tillägg med init_app”?
Skjut upp bindningen av tillägg tills appen skapas. Ni övar på Flask Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Flask Academy?
Du behöver inga förkunskaper. Utbildningen i Flask Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.
Hur lång tid tar lektionen ”Initiera tillägg med init_app”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Flask Academy-lektionen?
Ja. Varje Flask Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Problem med ett globalt app-objekt
- Skriv en create_app-funktion
- Initiera tillägg med init_app
- Registrera Blueprints i factoryn