レスポンスクッキー¶
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のドキュメントを確認してください。