推荐答案
在 FastAPI 中,查询参数可以通过在路径操作函数的参数中声明来使用。FastAPI 会自动将 URL 中的查询参数解析为函数参数。
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/")
async def read_items(skip: int = 0, limit: int = 10):
return {"skip": skip, "limit": limit}在这个例子中,skip 和 limit 是查询参数。如果访问 /items/?skip=20&limit=30,FastAPI 会自动将 skip 解析为 20,limit 解析为 30。
本题详细解读
查询参数的基本使用
在 FastAPI 中,查询参数是通过在路径操作函数的参数中声明来使用的。这些参数会自动从 URL 的查询字符串中提取并解析为相应的类型。
@app.get("/items/")
async def read_items(skip: int = 0, limit: int = 10):
return {"skip": skip, "limit": limit}skip和limit是查询参数。skip的默认值是0,limit的默认值是10。- 如果 URL 中没有提供这些参数,FastAPI 会使用默认值。
查询参数的类型转换
FastAPI 会自动将查询参数转换为声明的类型。例如,如果 skip 声明为 int 类型,FastAPI 会尝试将查询字符串中的 skip 值转换为整数。
@app.get("/items/")
async def read_items(skip: int = 0, limit: int = 10):
return {"skip": skip, "limit": limit}- 如果访问
/items/?skip=20&limit=30,skip会被解析为20,limit会被解析为30。 - 如果访问
/items/?skip=abc,FastAPI 会返回一个 422 错误,因为abc无法转换为整数。
可选和必填查询参数
查询参数可以是可选的或必填的。如果参数有默认值,那么它是可选的;如果没有默认值,那么它是必填的。
@app.get("/items/")
async def read_items(skip: int, limit: int = 10):
return {"skip": skip, "limit": limit}- 在这个例子中,
skip是必填的,因为没有默认值。如果 URL 中没有提供skip,FastAPI 会返回一个 422 错误。 limit是可选的,因为有默认值10。
多个查询参数
你可以声明多个查询参数,FastAPI 会处理所有参数。
@app.get("/items/")
async def read_items(skip: int = 0, limit: int = 10, q: str = None):
return {"skip": skip, "limit": limit, "q": q}- 这个例子中,
q是一个可选的字符串查询参数。 - 如果访问
/items/?skip=20&limit=30&q=fastapi,q会被解析为"fastapi"。
查询参数的验证
FastAPI 支持对查询参数进行验证。你可以使用 Pydantic 模型或直接在函数参数中使用类型注解来进行验证。
// www.javascriptcn.com code example
from pydantic import BaseModel
class ItemQuery(BaseModel):
skip: int = 0
limit: int = 10
q: str = None
@app.get("/items/")
async def read_items(query: ItemQuery):
return query- 在这个例子中,
ItemQuery是一个 Pydantic 模型,用于验证查询参数。 - FastAPI 会自动将查询参数解析为
ItemQuery模型,并进行验证。
总结
FastAPI 提供了灵活且强大的查询参数处理机制,支持类型转换、默认值、可选参数、必填参数以及参数验证。通过合理使用这些特性,你可以轻松构建出符合需求的 API 接口。