FastAPI 基礎學習(十三) Header操作


作者:麥克煎蛋   出處:https://www.cnblogs.com/mazhiyong/ 轉載請保留這段聲明,謝謝!

 

讀取Header信息

基於Query、Path、Cookie等模塊同樣的模式,我們可以利用Header模塊來聲明headers。

我們可以用定義其他模塊參數同樣的方式,便捷的定義Header模塊的參數信息。

Header是Query、Path、Cookie的姐妹類,它們都繼承自Param類。

1、導入模塊

from fastapi import Header

2、添加參數信息

參數信息的結構與Query、Path、Cookie等模塊完全相同。

user_agent: str = Header(None)

 

完整示例:

from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(*, user_agent: str = Header(None)): return {"User-Agent": user_agent}

3、自動轉換

大多數headers中都帶有"-"字符,如"User-Agent",但在Python中,User-Agent並不是一個合法的變量名稱。

因此為了能正確提取headers中的信息,Header模塊會把參數名稱中的"_"轉換成"-"。

Http Headers同時也是大小寫不敏感的,因此我們可以在Python代碼中使用user_agent來表示User-Agent

from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(*, user_agent: str = Header(None)):
    return {"user_agent": user_agent}

如果我們添加User-Agent參數並訪問:

http://127.0.0.1:8000/items/

輸出結果為:

{
    "user_agent": "Mozilla"
}

 

我們可以通過設置Header中的convert_underscores參數為Flase,來禁止這種從"_"到"-"的字符轉換(大多數情況下並並不需要)。

from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(*, user_agent: str = Header(None, convert_underscores=False)):
    return {"user_agent": user_agent}

4、重復headers處理

有些情況下,同樣的header會帶有多個值。

X-Token: foo
X-Token: bar

這時候,我們可以用一個list來接收重復的header數據。

from typing import List
from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(x_token: List[str] = Header(None)):
    return {"X-Token values": x_token}

響應結果為:

{
    "X-Token values": [
        "bar",
        "foo"
    ]
}

 

返回Header信息

我們可以在Response中返回Header信息給終端。

1、使用Response參數

我們可以在路徑操作函數中聲明Response參數,然后給這個臨時的Response對象設置header信息。

FastAPI通過這個臨時的Response對象解析出header信息(以及cookie信息和狀態碼等),然后放入到最終返回的Response對象中。

我們也可以在依賴項中使用Response參數,然后設置header信息(以及cookie信息等)。

from fastapi import FastAPI, Response

app = FastAPI()


@app.get("/headers-and-object/")
def get_headers(response: Response):
    response.headers["X-Cat-Dog"] = "alone in the world"
    return {"message": "Hello World"}

2、直接返回Response

我們也可以在直接返回的Response對象中設置header信息。

from fastapi import FastAPI
from fastapi.responses import JSONResponse

app = FastAPI()


@app.get("/headers/")
def get_headers():
 content = {"message": "Hello World"} headers = {"X-Cat-Dog": "alone in the world", "Content-Language": "en-US"} return JSONResponse(content=content, headers=headers)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM