レスポンス
Starletteには、send チャネルで適切なAS GIメッセージを送信するためのいくつかの応答クラスが含まれています。
応答する
署名: Response(content, status_code=200, headers=None, media_type=None)
content-文字列またはバイト文字列。status_code-整数型のHTTPステータスコード。headers-文字列辞書。media_typeメディアタイプを示す文字列。例えば:"text/html"
Starletteには自動的にContent-Lengthヘッダーが含まれます。また、media_type ですでに文字セットが指定されていない限り、media_typeに基づいてContent-Typeヘッダーが含まれ、テキストタイプに文字セットが追加されます。
レスポンスをインスタンス化したら、AS GIアプリケーションのインスタンスとして呼び出すことで送信できます。
from starlette. response import Response
async def app(スコープ、受信、送信):
assert scope['type']=='http'
response=Response('Hello, world!',media_type='text/plain')
await応答(スコープ、受信、送信)
クッキーの設定
Starletteは、応答オブジェクトにCookieを設定できる set_cookie メソッドを提供しています。
署名: Response.set_cookie(key, value, max_age=None, expires=None, path="/", domain=None, secure=False, httponly=False, samesite="lax")
key-クッキーキーとして機能する文字列。value-Cookie値として使用される文字列。max_age-クッキーの存続期間を秒単位で定義する整数。負の整数または値が0の場合、クッキーは直ちに破棄されます。Optionalexpires-クッキーの有効期限が切れるまでの秒数を定義する整数または日付時刻。Optionalpath-クッキーが適用されるルートのサブセットを指定する文字列。Optionaldomain-クッキーが有効なドメインを指定する文字列。Optionalsecure-SSLおよびHTTPSプロトコルを使用してリクエストが送信された場合にのみ、Cookieがサーバーに送信されることを示すブール値。Optionalhttponly-Document.cookieプロパティ、XMLHttpRequest、またはRequestAPIを介してJava ScriptからCookieにアクセスできないことを示すブール値。Optionalsamesite-クッキーのsameSiteポリシーを指定する文字列。有効な値は'lax'、'strict'、'none'です。デフォルトは'lax'です。Optional
クッキーを削除
代わりに、Starletteは、設定されたCookieを手動で期限切れにする delete_cookie メソッドも提供しています。
署名: Response.delete_cookie(key, path='/', domain=None)
HTMLレスポンス
テキストまたはバイトを受け取り、HTML応答を返します。
starletteからHTMLResponseをインポート
async def app(スコープ、受信、送信):
assert scope['type']=='http'
response=HTMLResponse('<html><body><h1>こんにちは、世界!</h1></body></html>')
await応答(スコープ、受信、送信)
プレーンテキスト応答
テキストまたはバイトを受け取り、プレーンテキストの応答を返します。
starletteからPlainTextResponseをインポート
async def app(スコープ、受信、送信):
assert scope['type']=='http'
response=PlainTextResponse('こんにちは、世界!')
await応答(スコープ、受信、送信)
JSONレスポンス
いくつかのデータを取得し、application/json エンコードされた応答を返します。
JSONResponseをインポートします。
async def app(スコープ、受信、送信):
assert scope['type']=='http'
response=JSONResponse({'hello': 'world'})
await応答(スコープ、受信、送信)
カスタムJSONシリアライズ
JSONシリアライズをきめ細かく制御する必要がある場合は、JSONResponse をサブクラス化し、render メソッドをオーバーライドできます。
たとえば、orjsonなどのサードパーティのJSONライブラリを使用する場合:
入力からimport Any
インポートorjson
JSONResponseをインポートします。
class OrjsonResponse(JSONResponse):
def render(self, content:Any)->bytes:
return orjson. dumps(コンテンツ)
一般に、特定のエンドポイントを微調整したり、非標準オブジェクトタイプをシリアル化したりする必要がない限り、デフォルトではそれに固執することをお勧めします JSONResponse 。
リダイレクト応答
HTTPリダイレクトを返します。デフォルトでは307ステータスコードが使用されます。
starletteからPlainTextResponseをインポートします。
async def app(スコープ、受信、送信):
assert scope['type']=='http'
if scope['path']!='/':
response=Redirect Response(url='/')
その他:
response=PlainTextResponse('こんにちは、世界!')
await応答(スコープ、受信、送信)
ストリーミング応答
非同期ジェネレータまたは通常のジェネレータ/イテレータを受け入れ、レスポンスボディをストリーミングします。
starletteからStreamingResponseをインポートします。
インポートasyncio
async def slow_number(最小値,最大値):
'<html><body><ul>'の出力
for number in range(最小、最大+1):
出力'<li>%d</li>'%number
asyncio. sleepを待つ(0.5)
'</ul></body></html>'の出力
async def app(スコープ、受信、送信):
assert scope['type']=='http'
ジェネレーター=遅い数字(1,10)
response=StreamingResponse(ジェネレーター、media_type='text/html')
await応答(スコープ、受信、送信)
クラスファイルオブジェクト(open() で作成されたオブジェクトなど)は通常のイテレータであることに注意してください。したがって、StreamingResponse で直接返すことができます。
ファイル応答
ファイルを非同期でレスポンスとしてストリーミングします。
他のレスポンスタイプと比較して、インスタンス化には異なるパラメーターのセットが必要です。
path-ストリーミングするファイルのファイルパス。headers-辞書として含める任意のカスタムヘッダー。media_type・メディアタイプを示す文字列。未設定の場合、ファイル名またはパスを使用してメディアタイプを推測します。filename-設定すると、応答Content-Dispositionに含まれます。content_disposition_type-レスポンスContent-Dispositionに含まれます。添付ファイル(デフォルト)またはインラインに設定できます。
ファイル応答には、適切な Content-Length、Last-Modified、および ETag ヘッダーが含まれます。
starletteからFile Responseをインポート
async def app(スコープ、受信、送信):
assert scope['type']=='http'
response=FileResponse('静的/ファビコン. ico')
await応答(スコープ、受信、送信)
第三者の対応
イベントソースの応答
サーバーがイベントを送信するためのレスポンスクラス。WebSocketsの複雑さを必要とせずに、サーバーからクライアントへのイベントフローを実装できます。
baize. asgi.FileResponseファイルレスポンス
Starlette FileResponse のスムーズな代替として、HeadメソッドとRangeリクエストを自動的に処理します。