Flask Academy · Lektion

Initialisér extensions med init_app

Udskyd binding af extensions, til appen oprettes.

Lektion 3 af 413 trin

Initialisér extensions med init_app er en gratis Flask Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Flask Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Flask Academy-kurset indeholder 4 lektioner i alt.

Udvidelsesdilemmaet

Udvidelser som SQLAlchemy plejede at tage appen med det samme. Inde i en fabrik fungerer det ikke, fordi app endnu ikke findes på importtidspunktet. 🤔

Opret uden en app

Løsningen består af to trin. Først opretter du udvidelsesobjektet på modulniveau uden at angive no app. Det forbliver ubundet indtil videre.

from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()  # no app yet

Forbind den senere

Derefter kalder du init_app inde i fabrikken, når appen er opbygget. Det forbinder udvidelsen med netop denne instans.

def create_app():
    app = Flask(__name__)
    db.init_app(app)
    return app

Hvorfor to trin

Udvidelsesobjektet kan imported anywhere som en global variabel, mens den faktiske forbindelse venter, til fabrikken har valgt en konfiguration. Det bedste fra begge verdener.

Kan importeres overalt

Fordi db ligger på modulniveau, kan dine modeller og visninger importere den frit uden at røre appen, så cirkulære importer undgås.

from app.extensions import db

Et ryddeligt extensions-modul

Et almindeligt mønster samler alle ubundne udvidelser i én extensions.py-fil, hvorefter fabrikken importerer og initialiserer dem hver især.

db = SQLAlchemy()
migrate = Migrate()
login = LoginManager()

Initialisér mange på én gang

Inde i create_app kalder du blot init_app på hver udvidelse og sender den samme nye app til dem alle.

db.init_app(app)
migrate.init_app(app, db)
login.init_app(app)

Forbindelse pr. app

Fordi forbindelsen sker i fabrikken, kan to forskellige apps hver især kalde init_app på den samme udvidelsesklasse uafhængigt af hinanden. Det er perfekt til tests.

Konfigurationen læses ved initialisering

Udvidelser læser indstillinger som database-URI'en under init_app, så angiv disse konfigurationsværdier, før du forbinder dem.

app.config["SQLALCHEMY_DATABASE_URI"] = uri
db.init_app(app)

Brug den i en kontekst

Efter init_app har udvidelsen brug for en app context for faktisk at kunne køre forespørgsler, fordi den skal vide, hvilken app den kommunikerer med.

with app.app_context():
    db.create_all()

Den gyldne regel

Opret udvidelsen ubundet ved import, og kald derefter init_app i fabrikken. Denne ene opdeling gør hele mønsteret muligt. 🔑

Hurtigt tjek

Hvorfor oprette et udvidelsesobjekt uden en app og derefter kalde init_app?

Opsummering

Du lærte fremgangsmåden i to trin: opbyg udvidelser ubundet, og kald derefter init_app i fabrikken. Globale objekter, der kan importeres, kombineret med forbindelse pr. app og uden cirkulære importer. 🌟

Gratis at komme i gang

Lær Python med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
30
Lektioner
120

Ofte stillede spørgsmål

Er lektionen “Initialisér extensions med init_app” gratis?

Ja — hele teksten til “Initialisér extensions med init_app” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Flask Academy-kurset, skal du opgradere til CoddyKit PRO. Flask Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Initialisér extensions med init_app”?

Udskyd binding af extensions, til appen oprettes. Du øver dig i Flask Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Flask Academy?

Der kræves ingen tidligere erfaring. Flask Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “Initialisér extensions med init_app”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Flask Academy-lektion?

Ja. Alle Flask Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Problemer med et globalt app-objekt
  2. Skriv en create_app-funktion
  3. Initialisér extensions med init_app
  4. Registrér blueprints i factoryen
← Tilbage til Flask Academy