外观
Query查询参数
Query参数
当声明不属于路径参数的其他函数参数时,FastAPI会将其当作查询参数处理,即“?”后面的参数。如:
from fastapi import FastAPI
app = FastAPI()
@app.get('/')
async def index(a: int = 0, b: int = 0):
return f'a = {a}, b = {b}'
由于它们都是URL的一部分,所以本质上都是字符串。当需要使用Python类型来声明Query参数时,它们就会被转换成对应的类型。
设置Query参数
Query参数并不是path中固定的一部分。它们是可选的,并且可以有默认值。
上面的例子中a和b的类型都为整型,它们在输出的时候没有带引号。
如果访问127.0.0.1:8000,由于a和b存在默认值,因此它就相当于访问127.0.0.1:8000?a=0&b=0。
如果URL中没有对应的查询参数,它会赋给该参数默认值。
同样地,也可以声明可选的Query参数,将其默认值设置为None即可。如:
from fastapi import FastAPI
app = FastAPI()
@app.get('/')
async def index(a: int = None, b: int = None):
return f'a = {a if a else None}, b = {b if b else None}'在这个例子中,a和b都为可选参数。
Query参数类型转换
若将查询参数设为bool类型,那么传入的参数会被转换。如:
from fastapi import FastAPI
app = FastAPI()
@app.get('/')
async def index(b: bool = None):
return {'b': b}
查询参数为1、on、true、True等值时,b参数值为True。查询参数为0、off、false、False等值时,b参数值为False。
同时使用Path和Query参数
当Path和Query参数交替出现时,FastAPI会区分参数。因此,并不需要特意指定它们的顺序,因为这些参数可以被参数名检测到。如:
from fastapi import FastAPI
app = FastAPI()
@app.get('/users/{user_id}/items/{item_id}')
async def index(user_id: int, item_id: int, short: bool):
return {'user_id': user_id, 'item_id': item_id, 'short': short}
使用交互式文档添加参数的页面如下图。

必需的查询参数
当一个查询参数没有默认值时,它就是一个必需参数。当查询参数不包含该参数时,FastAPI就会返回一个友好的错误页面。
from fastapi import FastAPI
app = FastAPI()
@app.get('/')
async def index(short: bool):
return {'short': short}上方的例子中,Query参数short没有设置默认值,在大窗口中的URL没有此参数,就会返回错误信息。小窗口中包含了short参数,它就会返回正确的结果。
