コンテンツにスキップ

レスポンスの Cookie

🌐 AI と人間による翻訳

この翻訳は、人間のガイドに基づいて AI によって作成されました。🤝

原文の意図を取り違えていたり、不自然な表現になっている可能性があります。🤖

AI LLM をより適切に誘導するのを手伝う ことで、この翻訳を改善できます。

英語版

Response パラメータを使う

path operation 関数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 を作成することもできます。

そのためには、Response を直接返す で説明されているとおりにレスポンスを作成します。

そのレスポンスに 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 Responsefrom starlette.responses import JSONResponse を使うこともできます。

FastAPI は開発者の利便性のために、starlette.responses と同じものを fastapi.responses として提供しています。ただし、利用可能なレスポンスの大半は Starlette から直接提供されています。

また、Response はヘッダーや Cookie の設定に頻繁に使われるため、fastapi.Response としても提供されています。

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