Lifespan
Aplikasi Starlette dapat mendaftarkan penangan siklus hidup untuk memproses kode yang perlu di jalankan sebelum aplikasi dimulai atau ketika aplikasi ditutup.
Kontekstual impor
Starlette.application diimpor dari Starlette
@ contextlib.asynccontextmanager
Async def umur (aplikasi):
Sinkronisasi dengan beberapa _ async _ resources ():
Cetak ("Jalankan saat startup!")
Hasil
Cetak ("Jalankan saat shutdown!")
Rute = [
...
]
Aplikasi = Starlette (rute = rute, umur = umur)
Starlette tidak akan mulai memproses permintaan yang masuk sampai siklus hidup berjalan.
Setelah semua koneksi telah ditutup dan tugas latar belakang yang sedang berlangsung telah selesai, kehidupan yang di jalankan dibongkar.
Pertimbangkan untuk menggunakan anyio.create_task_group() Untuk mengelola tugas asinkron.
Negara seumur hidup
Seumur hidup memiliki konsep state, yaitu kamus yang dapat digunakan untuk berbagi objek antara rentang hidup dan permintaan.
Kontekstual impor
Dari mengetik AsyncIterator impor, TypedDict
Impor htpx
Starlette.application diimpor dari Starlette
Dari bintang. permintaan permintaan impor
Dari pemula. Tanggapan impor PlainTextResponse
Dari starlette. rute impor routing
Negara Kelas (TypedDict):
http _ klien: htpx. AsyncClient
@ contextlib.asynccontextmanager
Async def umur (aplikasi: Starlette) - > AsyncIterator [Negara]:
Sinkronisasi dengan htpx. AsyncClient () sebagai klien:
Hasil {"http_client": client}
Async def homepage (permintaan: Permintaan) - > PlainTextResponse:
Klien = request.state.http _ klien
Response = menunggu klien. Dapatkan ("https://www.example.com")
Mengembalikan PlainTextResponse (respons.text)
Aplikasi = Starlette (
Umur = umur,
Rute = [Rute ("/," beranda) ]
)
state yang diterima atas permintaan adalah salinan dangkal negara yang diterima pada penangan seumur hidup.
Menjalankan hidup selama pengujian
Anda harus menggunakan TestClient sebagaimanajer konteks untuk memastikan umur panjang panggilan.
Dari contoh aplikasi impor
Dari starlette.testclient impor TestClient
Tes pasti _ beranda ():
Dengan TestClient (aplikasi) sebagai klien:
# Umur aplikasi disebut saat memasuki blok.
Tanggapan = klien. Dapatkan ("/")
Tegaskan tanggapan. status _ code = = 200
# Dan pembobolan umur berjalan saat keluar dari blok.