コンテンツへスキップ

レスポンスクッキー

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 はヘッダーとクッキーを設定するためによく使用されるため、FastAPIfastapi.Response でも提供しています。

利用可能なすべてのパラメータとオプションについては、Starletteのドキュメントを確認してください。