FastAPI 基礎學習(八) 參數附加信息 (一)


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

 

FastAPI支持為路徑參數、請求參數添加附加信息,起到輔助說明或輔助校驗的作用。

 

一、請求參數附加信息

對請求參數附加信息的支持,FastAPI通過Query模塊來實現。

1、導入Query模塊

from fastapi import Query

2、基於Query模塊聲明缺省值

可選參數聲明

q: str = Query(None)  # 等同於  q: str = None

缺省值參數聲明

q: str = Query("query")  # 等同於  q: str = "query"

必選參數聲明

q: str = Query(...)  # 等同於 q: str

3、添加附加信息

q: str = Query(None, max_length=50)  # 限制q的最大長度不超過50

主要用於字符串參數的附加信息:

min_length:最小長度
max_length:最大長度
regex:正則表達式

主要用於自動化文檔的附加信息:

title:參數標題
description:參數描述信息
deprecated:表示參數即將過期

特殊附加信息:

alias:參數別名

例如:

http://127.0.0.1:8000/items/?item-query=foobaritems

item-query並不是一個合法的Python變量名稱,Python內部會對它進行轉換,為了匹配到正確的參數變量我們就需要使用參數別名。

 

綜合示例如下:

from fastapi import FastAPI, Query

app = FastAPI()


@app.get("/items/")
async def read_items(
    q: str = Query(
        None,
        alias="item-query", title="Query string", description="Query string for the items to search in the database that have a good match", min_length=3, max_length=50, regex="^fixedquery$", deprecated=True
    )
):
    results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
    if q:
        results.update({"q": q})
    return results

二、請求參數列表

FastAPI基於Query模塊可以支持請求參數列表,例如請求參數q可以在URL中出現多次:

http://localhost:8000/items/?q=foo&q=bar

對應代碼實現如下:

from typing import List
from fastapi import FastAPI, Query

app = FastAPI()


@app.get("/items/")
async def read_items(q: List[str] = Query(None)):
    query_items = {"q": q}
    return query_items

返回結果內容為:

{
  "q": [
    "foo",
    "bar"
  ]
}

 

當然這里Query也支持請求參數列表的缺省值設置。

from typing import List
from fastapi import FastAPI, Query

app = FastAPI()


@app.get("/items/")
async def read_items(q: List[str] = Query(["foo", "bar"])):
    query_items = {"q": q}
    return query_items

 

我們也可以用list代替List[str],但這樣的話FastAPI就無法校驗列表內容了。

from fastapi import FastAPI, Query

app = FastAPI()


@app.get("/items/")
async def read_items(q: list = Query(None)):
    query_items = {"q": q}
    return query_items

 


免責聲明!

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



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