跳至內容

回應 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。

要這樣做,您可以按照直接返回 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 也在 fastapi.Response 中提供它。

要查看所有可用的參數和選項,請查看 Starlette 中的文件