レスポンスクッキー¶
Response パラメータの使用¶
あなたの パス操作関数 で Response 型のパラメーターを宣言できます。
そして、その 一時的な レスポンスオブジェクトにクッキーを設定できます。
from fastapi import FastAPI, Response
app = FastAPI()
@app.post("/cookie-and-object/")
def create_cookie(response: Response):
response.set_cookie(key="fakesession", value="fake-cookie-session-value")
return {"message": "Come to the dark side, we have cookies"}
その後、通常通り(dict、データベースモデルなど)必要なオブジェクトを返すことができます。
そして、response_modelを宣言した場合、返されたオブジェクトをフィルタリングして変換するために引き続き使用されます。
FastAPI は、その 一時的な レスポンスを使用してクッキー (ヘッダーとステータスコードも) を抽出し、あなたが返した値を含む最終的なレスポンスにそれらを配置します。これは response_model によってフィルタリングされます。
依存関係で Response パラメーターを宣言し、それらにクッキー (およびヘッダー) を設定することもできます。
Response を直接返す¶
コードで Response を直接返すときにクッキーを作成することもできます。
それには、レスポンスを直接返す で説明されているようにレスポンスを作成します。
次に、それにクッキーを設定し、それを返します。
from fastapi import FastAPI
from fastapi.responses import JSONResponse
app = FastAPI()
@app.post("/cookie/")
def create_cookie():
content = {"message": "Come to the dark side, we have cookies"}
response = JSONResponse(content=content)
response.set_cookie(key="fakesession", value="fake-cookie-session-value")
return response
ヒント
Response パラメーターを使用する代わりに、レスポンスを直接返すと、FastAPI はそれを直接返すことに注意してください。
したがって、データが正しい型であることを確認する必要があります。たとえば、JSONResponse を返す場合、JSON と互換性があることなどです。
また、response_model によってフィルタリングされるべきデータを送信していないことも確認してください。
詳細情報¶
技術的な詳細
from starlette.responses import Response または from starlette.responses import JSONResponse を使用することもできます。
FastAPI は、開発者の方々の便宜のために、starlette.responses と同じものを fastapi.responses として提供しています。しかし、利用可能なレスポンスのほとんどは Starlette から直接来ています。
そして、Response はヘッダーやクッキーを設定するためによく使われるため、FastAPI は fastapi.Response でも提供しています。
利用可能なすべてのパラメーターとオプションについては、Starlette のドキュメント を確認してください。