レスポンス Cookie¶
Response
パラメータを使用する¶
パス操作関数で、Response
型のパラメータを宣言できます。
そして、その一時的なレスポンスオブジェクトにCookieを設定できます。
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 は、その一時的なレスポンスを使用してCookie(ヘッダーとステータスコードも)を抽出し、response_model
でフィルタリングされた、返された値を含む最終レスポンスにそれらを配置します。
また、依存関係で Response
パラメータを宣言し、それらにCookie(およびヘッダー)を設定することもできます。
Response
を直接返す¶
コードで Response
を直接返すときに、Cookieを作成することもできます。
これを行うには、レスポンスを直接返すで説明されているように、レスポンスを作成できます。
次に、その中に Cookie を設定し、それを返します。
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
はヘッダーとCookieを設定するためによく使用される可能性があるため、FastAPI は fastapi.Response
でも提供しています。
利用可能なすべてのパラメータとオプションについては、Starlette のドキュメントを確認してください。