Flask Academy · Lektion

Initiera tillägg med init_app

Skjut upp bindningen av tillägg tills appen skapas.

Lektion 3 av 413 steg

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 yet

Bind 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 app

Varfö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 db

En 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. 🌟

Gratis att börja

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

  1. Problem med ett globalt app-objekt
  2. Skriv en create_app-funktion
  3. Initiera tillägg med init_app
  4. Registrera Blueprints i factoryn
← Tillbaka till Flask Academy