コンテンツにスキップ

レスポンス 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.responsesfastapi.responses として提供しています。ただし、利用可能なレスポンスのほとんどは、Starletteから直接提供されています。

そして、Response はヘッダーとCookieを設定するためによく使用される可能性があるため、FastAPIfastapi.Response でも提供しています。

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