前言
- 前面講過如何獲取?Headers:https://www.cnblogs.com/poloyy/p/15316932.html
- 也順帶提了下如何設置 Response Header,還是比較簡單的
?
有兩種實現(xiàn)場景
- 路徑操作函數(shù)聲明 Response 參數(shù)來設置 Header
- 在函數(shù)內(nèi),通過 return Response 來設置?Header
?
路徑操作函數(shù)聲明 Response 參數(shù)來設置 Header
from fastapi import FastAPI, Response app = FastAPI() @app.get("/item") # 路徑操作函數(shù)聲明一個 Response 類型的參數(shù) async def get_item(response: Response): response.headers["x-token"] = "token_!@#%#$^$%&" return {"name": "設置 headers"}
- 然后可以像往常一樣返回需要的任何對象(字典、數(shù)據(jù)庫模型等)
- 如果聲明了一個 response_model,它仍將用于過濾和轉換返回的對象
- FastAPI 將使用該臨時響應來提取 headers(還有 cookies、status_code),并將它們放入包含返回值的最終響應中,由任何 response_model 過濾
- 還可以在依賴項中聲明 Response 參數(shù),并在其中設置 headers、cookies
?
請求結果
?
聲明 response_model 和使用依賴項的栗子
from fastapi import FastAPI, Response, Depends from pydantic import BaseModel app = FastAPI() class Item(BaseModel): id: str name: str async def depnds_header(response: Response): response.headers["x-depends-token"] = "************" @app.get("/item2", dependencies=[Depends(depnds_header)], response_model=Item) async def get_item(): return {"id": "12345", "name": "測試 dependencies和response_model", "age": 24}
?
請求結果
?
通過 return Response 來設置 Header
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.headers["x-auth-token"] = "XXX_TOKEN" return response
?
請求結果
?
headers 的源碼
它是 Starlette 庫的 Response 類里面的方法哦,加了 @property 變成屬性,就可以訪問私有屬性 _headers 了
?
本文摘自 :https://www.cnblogs.com/