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
可选参数 j 作为判断条件,默认不返回年龄 age,当 j 为真时就会返回年龄信息
接口测试
普通请求,默认不会返回年龄信息
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_length
、max_length
设置参数的最小、最大长度限制pattern
使用正则表达式限制参数的值title
为参数定义标题,用于文档中描述参数的用途description
提供参数的详细描述,说明其在数据库搜索中的作用examples
给出参数的一个示例值,帮助理解其预期的输入格式alias
为参数指定一个别名,简化在代码中的引用deprecated
标记参数为已弃用,提示在新代码中不应使用