FastAPI(52)- Response Cookies 響應設定 Cookies
阿新 • • 發佈:2021-10-04
前言
- 前面講過如何獲取 Cookies:https://www.cnblogs.com/poloyy/p/15316660.html
- 也順帶提了下如何設定 Response Cookie,還是比較簡單的
有兩種實現場景
- 路徑操作函式宣告 Response 引數來設定 Cookie
- 在函式內,通過 return Response 來設定 Cookie
路徑操作函式宣告 Response 引數來設定 Cookie
from fastapi import FastAPI, Response app = FastAPI() @app.get("/item") # 路徑操作函式宣告一個 Response 型別的引數async def get_item(response: Response): response.set_cookie("test_token", "tokenABC") return {"name": "設定Cookie"}
- 然後可以像往常一樣返回需要的任何物件(字典、資料庫模型等)
- 如果聲明瞭一個 response_model,它仍將用於過濾和轉換返回的物件
- FastAPI 將使用該臨時響應來提取 cookie(還有 headers、status_code),並將它們放入包含返回值的最終響應中,由任何 response_model 過濾
- 還可以在依賴項中宣告 Response 引數,並在其中設定 cookie、headers
請求結果
宣告 response_model 和使用依賴項的栗子
from fastapi import FastAPI, Response, Depends from pydantic import BaseModel app = FastAPI() class Item(BaseModel): id: str name: str async def depnds_set_cookie(response: Response): response.set_cookie("x-depends-token", "************") @app.get("/item2", dependencies=[Depends(depnds_set_cookie)], response_model=Item) async def get_item(): return {"id": "12345", "name": "測試 dependencies和response_model", "age": 24}
請求結果
通過 return Response 來設定 Cookie
from fastapi import FastAPI, Response from fastapi.responses import JSONResponse app = FastAPI() @app.get("/items") async def get_item(): response = JSONResponse(content={"name": "JSONResponse"}) response.set_cookie("test_token", "ABC_token") return response
請求結果
set_cookie 的原始碼
它是 Starlette 庫的 Response 類裡面的方法哦