Push en context i scripts og shells
Kør kode uden for en request med app_context.
Push en context i scripts og shells er en gratis Flask Academy-lektion på CoddyKit. Dette er lektion 4 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.
Uden for webben
Nogle gange kører du Flask-kode uden en forespørgsel, f.eks. et script, der indsætter startdata i databasen. Der er ingen kontekst, så de sædvanlige proxyer fejler.
Den afslørende fejl
Kør sådan en kode, så rejser Flask RuntimeError: working outside of application context. Den fortæller dig, at ingen appkontekst er aktiv.
Skub den selv på
Løs det ved at skubbe en på med app.app_context(). Omslut din kode i en with-blok, så fungerer current_app igen.
with app.app_context():
print(current_app.name)Hvad with-blokken gør
Når du går ind i with-blokken, skubbes konteksten på, og når du forlader den, tages konteksten af. Du behøver aldrig rydde op manuelt.
Nu fungerer udvidelser
Inde i blokken fungerer udvidelser, der er forbundet med appen, normalt. Du kan køre db.create_all() eller udføre forespørgsler mod modeller fra et almindeligt script.
with app.app_context():
db.create_all()Brug for en falsk forespørgsel?
Hvis du vil teste kode, der læser request, skal du skubbe en testanmodningskontekst med test_request_context i stedet for en appkontekst.
with app.test_request_context("/hello"):
print(request.path)Flask-shellen
Kommandoen flask shell åbner en Python-shell, hvor en appkontekst allerede er skubbet ind, så du kan undersøge din app interaktivt.
flask shellOgså CLI-kommandoer
Brugerdefinerede flask-kommandoer, som du registrerer, kører også automatisk i en appkontekst, så seed- og administratorscripts bare virker.
@app.cli.command()
def seed():
db.create_all()Vælg den rigtige kontekst
Vælg efter behov: Brug app_context, når du kun arbejder med appen eller databasen, og en anmodningskontekst, når din kode læser data fra request.
Begræns kontekstens omfang
Skub kontekster ind i en tæt with-blok i stedet for at bruge dem i hele scriptet. Et mindre scope giver tydeligere kode og en forudsigelig afslutning.
Hvorfor det er vigtigt
Når du skubber kontekster ind, kan du genbruge applogik i migrations, cron-jobs og test i stedet for kun i aktive webanmodninger.
Hurtigt tjek
Lad os få styr på løsningen på kontekstfejlen.
Opsummering
Ingen anmodning? Skub en ind. Brug app_context til arbejde med appen og databasen, test_request_context til data fra request, og lad flask shell klare det for dig. 🎉
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 “Push en context i scripts og shells” gratis?
Ja — hele teksten til “Push en context i scripts og shells” 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 “Push en context i scripts og shells”?
Kør kode uden for en request med app_context. 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 4 af 4.
Hvor lang tid tager lektionen “Push en context i scripts og shells”?
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
- App context kontra request context
- current_app og g-objektet
- Context locals og trådsikkerhed
- Push en context i scripts og shells