FastAPI教程 Header 參數(shù)

2022-08-20 11:38 更新

你可以使用定義 Query, Path 和 Cookie 參數(shù)一樣的方法定義 Header 參數(shù)。

導入 Header

首先導入 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}

聲明 Header 參數(shù)

然后使用和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ù)。

自動轉(zhuǎn)換

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

有可能收到重復的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)換它們。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號