W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
你可以使用定義 Query, Path 和 Cookie 參數(shù)一樣的方法定義 Header 參數(shù)。
首先導入 Header:
from typing import Optional
from fastapi import FastAPI, Header
app = FastAPI()
@app.get("/items/")
async def read_items(user_agent: Optional[str] = Header(None)):
return {"User-Agent": user_agent}
然后使用和Path, Query and Cookie 一樣的結(jié)構(gòu)定義 header 參數(shù)
第一個值是默認值,你可以傳遞所有的額外驗證或注釋參數(shù):
from typing import Optional
from fastapi import FastAPI, Header
app = FastAPI()
@app.get("/items/")
async def read_items(user_agent: Optional[str] = Header(None)):
return {"User-Agent": user_agent}
技術細節(jié)
Header 是 Path, Query 和 Cookie 的兄弟類型。它也繼承自通用的 Param 類.
但是請記得,當你從fastapi導入 Query, Path, Header, 或其他時,實際上導入的是返回特定類型的函數(shù)。
Info
為了聲明headers, 你需要使用Header, 因為否則參數(shù)將被解釋為查詢參數(shù)。
Header 在 Path, Query 和 Cookie 提供的功能之上有一點額外的功能。
大多數(shù)標準的headers用 "連字符" 分隔,也稱為 "減號" (-)。
但是像 user-agent 這樣的變量在Python中是無效的。
因此, 默認情況下, Header 將把參數(shù)名稱的字符從下劃線 (_) 轉(zhuǎn)換為連字符 (-) 來提取并記錄 headers.
同時,HTTP headers 是大小寫不敏感的,因此,因此可以使用標準Python樣式(也稱為 "snake_case")聲明它們。
因此,您可以像通常在Python代碼中那樣使用 user_agent ,而不需要將首字母大寫為 User_Agent 或類似的東西。
如果出于某些原因,你需要禁用下劃線到連字符的自動轉(zhuǎn)換,設置Header的參數(shù) convert_underscores 為 False:
from typing import Optional
from fastapi import FastAPI, Header
app = FastAPI()
@app.get("/items/")
async def read_items(
strange_header: Optional[str] = Header(None, convert_underscores=False)
):
return {"strange_header": strange_header}
Warning
在設置 convert_underscores 為 False 之前,請記住,一些HTTP代理和服務器不允許使用帶有下劃線的headers。
有可能收到重復的headers。這意味著,相同的header具有多個值。
您可以在類型聲明中使用一個list來定義這些情況。
你可以通過一個Python list 的形式獲得重復header的所有值。
比如, 為了聲明一個 X-Token header 可以出現(xiàn)多次,你可以這樣寫:
from typing import List, Optional
from fastapi import FastAPI, Header
app = FastAPI()
@app.get("/items/")
async def read_items(x_token: Optional[List[str]] = Header(None)):
return {"X-Token values": x_token}
如果你與路徑操作通信時發(fā)送兩個HTTP headers,就像:
X-Token: foo
X-Token: bar
響應會是:
{
"X-Token values": [
"bar",
"foo"
]
}
使用 Header 來聲明 header , 使用和 Query, Path 與 Cookie 相同的模式。
不用擔心變量中的下劃線,F(xiàn)astAPI 會負責轉(zhuǎn)換它們。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: