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