Lewati ke isi

Respons

Starlette berisi kelas respons untuk mengirim pesan ASGI yang sesuai melalui saluran send.

tanggapan

Tanda tangan: Response(content, status_code=200, headers=None, media_type=None)

  • content - Sebuah string atau string byte.
  • status_code Kode status HTTP bilangan bulat.
  • headers - kamus string.
  • media_type - String yang memberikan jenis media. Misalnya: "text / html"

Starlette akan secara otomatis menyertakan header Content-Length. Ini juga akan menyertakan header Content-Type tergantung pada media _ ketik dan tambahkan set karakter untuk jenis teks, kecuali set karakter sudah ditentukan dalam media_type.

Setelah Anda menetapkan tanggapan, Anda dapat mengirimkannya dengan menyebutnya sebagai contoh aplikasi ASGI.

Tanggapan dari starlette. impor


Async aplikasi def (lingkup, menerima, mengirim):
    Tegaskan lingkup ['tipe'] = = 'http'
    Tanggapan = Tanggapan ('Halo, dunia!', media _ type = 'text / plain')
    Menunggu tanggapan (lingkup, menerima, mengirim)

Starlette menyediakan metode set_cookie yang memungkinkan Anda mengatur cookie pada objek respons.

Tanda tangan: Response.set_cookie(key, value, max_age=None, expires=None, path="/", domain=None, secure=False, httponly=False, samesite="lax")

  • key Tali yang akan digunakan sebagai kunci kue.
  • value String yang akan digunakan sebagai nilai cookie.
  • max_age - Sebuah bilangan bulat yang mendefinisikan masa pakai cookie dalam hitungan detik. Sebuah bilangan bulat atau nilai negatif adalah 0 Cookies akan segera dibuang. Optional
  • expires - Baik bilangan bulat yang mendefinisikan jumlah detik sebelum cookie berakhir, atau tanggal dan waktu. Optional
  • path String yang menentukan subset rute yang akan diterapkan cookie. Optional
  • domain - String yang menentukan bidang di mana cookie valid. Optional
  • secure Nilai boolean yang menunjukkan bahwa cookie hanya akan di kirim ke server saat permintaan dibuat menggunakan protokol SSL dan HTTPS. Optional
  • httponly- Nilai boolean yang menunjukkan bahwa cookie tidak dapat diakses melalui JavaScript melalui properti Document.cookie,XMLHttpRequest, atau Request API.Optional
  • samesite- string yang menentukan sama Kebijakan Situs untuk cookie. Nilai valid adalah 'lax','strict', dan 'none'. Default adalah 'lax'.Optional

Sebaliknya, Starlette juga menyediakan metode delete_cookie untuk menghapus cookie set secara manual.

Tanda tangan: Response.delete_cookie(key, path='/', domain=None)

tanggapan HTML

Terima beberapa teks atau byte dan kembalikan respons HTML.

Dari pemula. Tanggapan impor HTMLResponse


Async aplikasi def (lingkup, menerima, mengirim):
    Tegaskan lingkup ['tipe'] = = 'http'
    Tanggapan = Respons HTML ('<html><body><h1>Halo, dunia!</h1></body></html>')
    Menunggu tanggapan (lingkup, menerima, mengirim)

respons teks biasa

Menerima beberapa teks atau byte dan mengembalikan respons teks biasa.

Dari pemula. Tanggapan impor PlainTextResponse


Async aplikasi def (lingkup, menerima, mengirim):
    Tegaskan lingkup ['tipe'] = = 'http'
    Tanggapan = PlainTextResponse ('Halo, dunia!')
    Menunggu tanggapan (lingkup, menerima, mengirim)

Respon JSON

Dapatkan beberapa data dan kembalikan respons yang dikodekan application/json.

Dari pemula. Tanggapan impor JSONResponse


Async aplikasi def (lingkup, menerima, mengirim):
    Tegaskan lingkup ['tipe'] = = 'http'
    Tanggapan = JSONResponse ({'hello': 'world'})
    Menunggu tanggapan (lingkup, menerima, mengirim)

Serialisasi JSON Kustom

Jika Anda membutuhkan kontrol butiran halus atas serialisasi JSON, Anda dapat subclass JSONResponse dan mengesampingkan metode render.

Misalnya, jika Anda ingin menggunakan perpustakaan JSON pihak ketiga, seperti orjson:

Impor apa pun dari pengetikan

impor orjson
Dari pemula. Tanggapan impor JSONResponse


Respons Orjsonik Kelas (JSONResponse):
    Def render (sendiri, konten: Apa saja) - > byte:
        Mengembalikan orjson.dumps (konten)

Secara umum, kecuali jika Anda ingin mengoptimalkan titik akhir tertentu secara mikro atau perlu membuat serial jenis objek non-standar, Anda mungkin ingin tetap menggunakan JSONResponse secara default.

Respon ulang

Mengembalikan pengalihan HTTP. 307 kode status digunakan secara default.

Dari pemula. Tanggapan impor PlainTextResponse, RedirectResponse


Async aplikasi def (lingkup, menerima, mengirim):
    Tegaskan lingkup ['tipe'] = = 'http'
    Jika lingkup ['path']! = '/':
        Respon = RedirectResponse (url = '/')
    Lainnya:
        Tanggapan = PlainTextResponse ('Halo, dunia!')
    Menunggu tanggapan (lingkup, menerima, mengirim)

respons streaming

Ambil generator asinkron atau generator / iterator normal dan alirkan badan respons.

StreamingResponse diimpor dari starlette.responses
asyncio impor


Async def slow _ number (minimal, maksimal):
    Menghasilkan '<html><body><ul>s'
    Untuk angka dalam jangkauan (minimum, maksimum + 1):
        Hasil '<li>% d</li>'% number
        Menunggu asyncio.tidur (0,5)
    Menghasilkan '</ul></body></html>'


Async aplikasi def (lingkup, menerima, mengirim):
    Tegaskan lingkup ['tipe'] = = 'http'
    Generator = lambat _ angka (1, 10)
    Respon = StreamingResponse (generator, media _ type = 'text / html')
    Menunggu tanggapan (lingkup, menerima, mengirim)

Harap dicatat bahwa objek file kelas (seperti yang dibuat oleh open()) adalah iterator normal. Oleh karena itu, Anda dapat mengembalikannya langsung di StreamingResponse.

respon file

Streaming file sebagai respons secara asinkron.

Instantiation membutuhkan serangkaian parameter yang berbeda dari jenis respons lainnya:

  • path Jalur file file yang akan dialirkan.
  • headers - Setiap header khusus untuk dimasukkan sebagai kamus.
  • media_type - Sebuah string memberikan jenis media. Jika tidak ditetapkan, nama file atau path akan digunakan untuk menyimpulkan jenis media.
  • filename- Jika ditetapkan, itu akan dimasukkan dalam respons Content-Disposition.
  • content_disposition_type- akan dimasukkan dalam Content-Disposition respons. Dapat diatur ke "lampiran" (default) atau "koneksi internal."

Respon file akan berisi header Content-Length,Last-Modified, dan ETag yang sesuai.

FileResponse diimpor dari starlette.responses


Async aplikasi def (lingkup, menerima, mengirim):
    Tegaskan lingkup ['tipe'] = = 'http'
    Tanggapan = FileResponse ('statistik / favicon.ico')
    Menunggu tanggapan (lingkup, menerima, mengirim)

tanggapan pihak ketiga

tanggapan sumber insiden

Kelas respons yang mengimplementasikan acara yang di kirim server. Ini memungkinkan streaming acara dari server ke klien tanpa kompleksitas WebSockets.

Baize.asgi. fileResponse

Sebagai alternatif yang mulus untuk Starlette FileResponse, secara otomatis akan menangani metode Head dan permintaan Range.