1. 安装 FastAPI 和 Uvicorn
首先,确保你已经安装了 FastAPI 和 Uvicorn。可以使用以下命令进行安装:
bash
pip install fastapi uvicorn
2. 创建 Pydantic 模型
Pydantic 模型用于定义请求体的结构和数据验证。下面是一个示例模型,表示一个商品(Item):
python
from pydantic import BaseModel, Field
class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
class Config:
schema_extra = {
"example": {
"name": "Sample Item",
"price": 10.5
}
}
在这个模型中,name 和 price 是必填字段,而 description 和 tax 是可选字段。我们还添加了一个 Config 类来提供示例数据,这将在 API 文档中显示。
3. 创建 FastAPI 应用并定义 POST 路由
接下来,创建一个 FastAPI 应用,并定义一个处理 POST 请求的路由:
python
from fastapi import FastAPI
app = FastAPI()
@app.post("/items/")
async def create_item(item: Item):
return item
@app.post("/users/{user_id}/items/")
async def create_item_for_user(user_id: int, item: Item):
return {"user_id": user_id, "item": item}
在这个例子中,当向 /items/ 发送 POST 请求时,FastAPI 会自动解析请求体中的 JSON 数据,并将其转换为 Item 对象。如果请求体不符合模型的要求,FastAPI 会返回一个错误响应。我们还添加了一个路由来处理用户 ID 作为路径参数。
4. 启动应用
使用 Uvicorn 启动应用:
bash
uvicorn main:app --reload
这里假设你的代码保存在 main.py 文件中。
5. 测试 POST 请求
你可以使用工具如 Postman 或 curl 来测试这个 POST 接口。以下是一个使用 curl 的示例:
bash
curl -X POST "http://127.0.0.1:8000/items/" -H "Content-Type: application/json" -d '{"name": "Sample Item", "price": 10.5}'
如果请求成功,你将收到如下响应:
json
{
"name": "Sample Item",
"description": null,
"price": 10.5,
"tax": null
}
6. 使用自定义验证器
你可以使用 Pydantic 的 @validator 装饰器来定义自定义验证器。例如,验证商品名称的长度:
python
from pydantic import BaseModel, Field, validator
class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
@validator("name")
def name_length(cls, value):
if len(value) < 5:
raise ValueError("Name must be at least 5 characters long")
return value
7. 使用枚举类型
你可以使用 Python 的 enum 模块来定义枚举类型,并在 Pydantic 模型中使用它们:
python
from enum import Enum
from pydantic import BaseModel
class ItemType(str, Enum):
ELECTRONICS = "electronics"
FASHION = "fashion"
class Item(BaseModel):
name: str
type: ItemType
price: float
在这个例子中,ItemType 是一个枚举类型,它定义了两种商品类型:电子产品和时尚产品。
总结
通过以上步骤,你可以轻松地在 FastAPI 中处理 POST 请求的参数,并利用 Pydantic 模型确保传入数据的有效性。同时,FastAPI 会自动生成 API 文档,使得构建和维护 API 更加高效和可靠。