Lifespan
Starlette-applicaties kunnen een levenscyclushandler registreren voor het verwerken van code die moet worden uitgevoerd voordat de applicatie start of wanneer de applicatie wordt gesloten.
Contextlib importeren
Starlette.applicaties importeren vanuit Starlette
@ contextlib.asynccontextmanager
Async def levensduur (app):
Async met sommige _ async _ bronnen ():
Afdrukken ("Uitvoeren bij opstarten!")
Opbrengst
Afdrukken ("Uitvoeren bij afsluiten!")
Routes = [
...
]
App = Starlette (routes = routes, levensduur = levensduur)
Starlette begint pas met het verwerken van inkomende verzoeken als de levenscyclus is afgelopen.
Zodra alle verbindingen zijn gesloten en alle lopende achtergrondtaken zijn voltooid, wordt de levensduur gedemonteerd.
Overweeg anyio.create_task_group() te gebruiken om asynchrone taken te beheren.
Levensduur staat
Lifetime heeft het concept van state, een woordenboek dat kan worden gebruikt om objecten te delen tussen levensduur en verzoeken.
Contextlib importeren
Vanaf het typen van import AsyncIterator, TypedDict
Htpx importeren
Starlette.applicaties importeren vanuit Starlette
Van starlette. aanvragen import aanvragen
Vanaf starlette.reacties importeren PlainTextResponse
Van starlette. routing importeren Route
Klassestaat (TypedDict):
http _ client: htpx. AsyncClient
@ contextlib.asynccontextmanager
Async def levensduur (app: Starlette) - > AsyncIterator [staat]:
Async met htpx. AsyncClient () als client:
Opbrengst {"http_client": client}
Async def startpagina (aanvraag: aanvraag) - > PlainTextResponse:
Client = aanvraag.state.http _ client
Reactie = afwachten client.get ("https://www.example.com")
Retourneert PlainTextResponse (response.text)
Uitgever: App = Starlette (
Levensduur = levensduur,
Routes = [Route ("/", startpagina)]
)
De state die op het verzoek is ontvangen, is een ondiepe kopie van de staat die op de levenslange handler is ontvangen.
Leven tijdens testen
U moet TestClient gebruiken als contextmanager om de levensduur van gesprekken te garanderen.
Uit voorbeeld import app
Vanaf starlette.testclient importeren TestClient
Def test _ startpagina ():
Met TestClient (app) als client:
# De levensduur van de applicatie wordt aangeroepen bij het betreden van het blok.
Reactie = client.get ("/")
Antwoord. status _ code = = 200
# En de levensduur van de demontage loopt bij het verlaten van het blok.