回應 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 Response
或 from starlette.responses import JSONResponse
。
為了方便開發者,FastAPI 提供與 starlette.responses
相同的 fastapi.responses
。但大多數可用的回應都直接來自 Starlette。
由於 Response
可以經常被用來設定標頭和 Cookie,FastAPI 也在 fastapi.Response
中提供它。
要查看所有可用的參數和選項,請查看 Starlette 中的文件。