Part1 何为查询参数

路径函数中声明不属于路径参数的其他函数参数时,它们将被自动解释为“查询字符串”参数,就是url?之后用&分割的key=value的键值对

Part2 示例代码

from typing import Optional
from fastapi import FastAPI
import uvicorn

app = FastAPI()
goods=['xiaomi','apple','huawei','oppo']

# 如果要给接口定义查询参数,直接在处理函数中添加参数即可
@app.get('/goods/')
async def get_goods(start:int = 0,end:int = 3):
    return goods[start:end]

if __name__ == "__main__":
    uvicorn.run(app, host="127.0.0.1", port=8000)

接口测试

使用默认参数
C:\Users\jopa>curl "http://127.0.0.1:8000/goods/"
["xiaomi","apple","huawei"]
带部分参数
C:\Users\jopa>curl "http://127.0.0.1:8000/goods/?start=1"
["apple","huawei"]
带参数
C:\Users\jopa>curl "http://127.0.0.1:8000/goods/?start=1&end=2"
["apple"]

Part3 可选参数

在我们实际开发中,某些参数可能需要,也可能不需要,这个根据用户的需求来定

@app.get('/name/{name}/age/{age}')
async def get_userinfo(name: str, age: int, j:Optional[bool] = False):
    ret = {'Name': name}
    if j:
        ret.update({'Age':age})
    return ret

接口测试

普通请求,默认不会返回年龄信息

C:\Users\jopa>curl "http://127.0.0.1:8000/name/jopa/age/18"
{"Name":"jopa"}

携带参数 j 进行请求,会返回年龄信息

C:\Users\jopa>curl "http://127.0.0.1:8000/name/jopa/age/18?j=true"
{"Name":"jopa","Age":18}

Part4 参数类型转换

如上,我们在携带参数 j 进行请求的时候其值为 True,FastApi 为我们提供了更为方便的方式,就是查询参数的类型转换,即当其值为任何真值时,都可完成请求处理

示例请求

j=1 时进行请求操作

C:\Users\jopa>curl "http://127.0.0.1:8000/name/jopa/age/18?j=1"
{"Name":"jopa","Age":18}

j=0 时进行请求操作

C:\Users\jopa>curl "http://127.0.0.1:8000/name/jopa/age/18?j=0"
{"Name":"jopa"}

Part5 查询参数的校验

fastapi中提供一个 Query 对象,可以使用 Query 显示的将其声明为查询参数,并可以给参数设置类型和相关的限制

@app.get('/item')
async def get_item(q: Optional[str]  = Query(
    default=None, 
    min_length=3, 
    max_length=5,
    pattern="^[A-Za-z]+$",
    title="查询字符串",
    description="查询字符串详细描述",
    examples=["Foo", "Bar"], 
    alias="item-query",
    deprecated=True
)):
    results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
    if q:
        results.update({"q": q})
    return results

参数定义

  • default 定义一个参数,其值为None,表示此参数没有默认值
  • min_lengthmax_length 设置参数的最小、最大长度限制
  • pattern 使用正则表达式限制参数的值
  • title 为参数定义标题,用于文档中描述参数的用途
  • description 提供参数的详细描述,说明其在数据库搜索中的作用
  • examples 给出参数的一个示例值,帮助理解其预期的输入格式
  • alias 为参数指定一个别名,简化在代码中的引用
  • deprecated 标记参数为已弃用,提示在新代码中不应使用
最后修改:2025 年 05 月 30 日
如果觉得我的文章对你有用,请随意赞赏