FastAPI(53)- Response Headers 響應設定 Headers
阿新 • • 發佈:2021-10-04
前言
- 前面講過如何獲取Headers:https://www.cnblogs.com/poloyy/p/15316932.html
- 也順帶提了下如何設定 Response Header,還是比較簡單的
有兩種實現場景
- 路徑操作函式宣告 Response 引數來設定 Header
- 在函式內,通過 return Response 來設定Header
路徑操作函式宣告 Response 引數來設定 Header
from fastapi import FastAPI, Response app = FastAPI() @app.get("/item") # 路徑操作函式宣告一個 Response 型別的引數async def get_item(response: Response): response.headers["x-token"] = "token_!@#%#$^$%&" return {"name": "設定 headers"}
- 然後可以像往常一樣返回需要的任何物件(字典、資料庫模型等)
- 如果聲明瞭一個 response_model,它仍將用於過濾和轉換返回的物件
- FastAPI 將使用該臨時響應來提取 headers(還有 cookies、status_code),並將它們放入包含返回值的最終響應中,由任何 response_model 過濾
- 還可以在依賴項
請求結果
宣告 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 了