推荐答案
在 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 模型或直接在函数参数中使用类型注解来进行验证。
-- -------------------- ---- ------- ---- -------- ------ --------- ----- --------------------- ----- --- - - ------ --- - -- -- --- - ---- ------------------- ----- --- ----------------- ----------- ------ -----
- 在这个例子中,
ItemQuery
是一个 Pydantic 模型,用于验证查询参数。 - FastAPI 会自动将查询参数解析为
ItemQuery
模型,并进行验证。
总结
FastAPI 提供了灵活且强大的查询参数处理机制,支持类型转换、默认值、可选参数、必填参数以及参数验证。通过合理使用这些特性,你可以轻松构建出符合需求的 API 接口。