混合使用 Path、Query 和请求体参数
混合使用 Path、Query 和请求体参数是相当简单的,FastAPI提供了直观的方式来定义和处理这些参数。以下是一个简单的例子,演示了如何在 FastAPI 中混合使用这三种类型的参数: from fastapi import FastAPI, Path, Query, Body
代码语言:javascript复制app = FastAPI()
class UserInfo:
def __init__(self, name: str, age: int):
self.name = name
self.age = age
@app.put("/update_user/{user_id}")
async def update_user(
user_id: int = Path(..., title="The ID of the user", ge=1),
status: str = Query(..., title="The status of the user", description="Set the status of the user"),
user_info: UserInfo = Body(..., title="User information", description="The new information for the user")
):
# Your update logic here
return {"user_id": user_id, "status": status, "user_info": user_info.__dict__}
user_id 是 Path 参数,它必须是正整数。 status 是 Query 参数,它是一个字符串,不能为空。 user_info 是请求体参数,它是一个自定义的类 UserInfo 的实例,包含了用户的新名称和年龄。 FastAPI 会根据这些参数的类型和注解,自动进行验证和转换。在实际请求中,你可以使用类似以下的请求:
代码语言:javascript复制PUT http://127.0.0.1:8000/update_user/42?status=active
{
"name": "New John",
"age": 26
}
请求体中的数据是以 JSON 格式发送的
详解Path和Query
Path 和 Query 是用于处理 HTTP 请求中的路径参数和查询参数的工具。它们提供了一种声明式的方式,使得定义和验证这些参数变得非常简单。
Path 参数
Path 用于声明路径参数,也就是 URL 中的一部分。在 FastAPI 中,你可以使用 Path 类型来指定路径参数的类型,并添加其他的验证条件。
代码语言:javascript复制from fastapi import FastAPI, Path
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id: int = Path(..., title="The ID of the item", ge=1)):
return {"item_id": item_id}
item_id 是路径参数,Path(…, title=“The ID of the item”, ge=1) 表示它是一个必须为正整数的路径参数。… 表示这个参数是必需的。
Query 参数
Query 用于声明查询参数,也就是 URL 中通过 ? 传递的参数。与 Path 类似,你可以使用 Query 类型来指定查询参数的类型,并添加其他的验证条件。
代码语言:javascript复制from fastapi import FastAPI, Query
app = FastAPI()
@app.get("/items/")
async def read_item(skip: int = Query(0, title="Skip items", ge=0), limit: int = Query(10, title="Limit items", le=100)):
return {"skip": skip, "limit": limit}
在这个例子中,skip 和 limit 是查询参数,它们都有默认值,并且通过 Query(0, title=“Skip items”, ge=0) 和 Query(10, title=“Limit items”, le=100) 进行了验证。ge 表示大于等于,le 表示小于等于。
总之
Path 参数 是通过 URL 路径传递的参数,使用 Path 类型进行声明。 Query 参数 是通过 URL 查询字符串传递的参数,使用 Query 类型进行声明。 通过使用这些声明式的方式,FastAPI 不仅可以进行参数的类型转换,还能自动进行验证和文档生成。 在 FastAPI 中,这些声明式的参数处理方式不仅简化了代码,还提供了更好的类型提示和验证机制,使得 API 的开发更加方便和可靠。
我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=3ipthahvucqok