揭秘FastAPI高效魅力:Pydantic数据验证,构建稳健API的秘籍

FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,由 Python 3.6+ 支持。它基于标准 Python 类型提示,并且旨在快速开发。FastAPI 的一个关键特性是其内置的数据验证和验证器,其中 Pydantic 是其核心。Pydantic 提供了一种简单而强大的方式来定义数据结构,并自动验证输入数据是否符合预期。
Pydantic 简介
Pydantic 是一个 Python 库,用于创建数据模型,并自动验证输入数据。它主要用于数据验证,但也可以用于数据序列化和反序列化。Pydantic 的核心是
BaseModel
类,它允许你定义一个数据结构,并为其属性提供类型注解。
安装 Pydantic
首先,确保你已经安装了 FastAPI 和 Pydantic。如果没有,可以通过以下命令进行安装:
pip install fastapi pydantic
Pydantic 数据模型
使用 Pydantic 创建数据模型非常简单。以下是一个基本的例子:
from pydantic import BaseModel

class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
在这个例子中,我们定义了一个名为
Item
的模型,它有三个属性:
name
、
description
和
price
。
description
和
tax
属性是可选的。
数据验证
Pydantic 会自动验证传入的数据是否符合定义的模型。如果数据不符合模型定义,Pydantic 会抛出一个
pydantic.ValidationError
异常。
示例
以下是一个使用 FastAPI 和 Pydantic 创建的简单 API,它接受一个包含
name
和
price
的 JSON 对象,并返回该对象:
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
name: str
price: float

@app.post(“/items/”)
async def create_item(item: Item):
return item
在这个例子中,如果客户端发送了一个不符合
Item
模型的 JSON 对象,FastAPI 会自动返回一个错误响应。
高级数据验证
Pydantic 允许你定义更复杂的验证规则。以下是一些高级验证的例子:
验证器
from pydantic import BaseModel, validator

class Item(BaseModel):
name: str
price: float

@validator(‘price’)
def check_price(cls, value):
if value <= 0: raise ValueError('Price must be greater than 0') return value 在这个例子中,我们添加了一个验证器来确保 price 属性大于 0。 额外属性 class Item(BaseModel): name: str price: float extra: dict = None @validator('extra') def check_extra(cls, value): if value is not None: for k, v in value.items(): if k.startswith('_'): raise ValueError(f"Key '{k}' is not allowed") return value 在这个例子中,我们验证了 extra 字典中的键是否以下划线开头。 总结 Pydantic 是 FastAPI 中构建稳健 API 的强大工具。通过使用 Pydantic,你可以轻松定义数据模型并自动验证输入数据。这不仅提高了代码的可读性和可维护性,还减少了错误和漏洞的风险。 通过本文的介绍,你应该已经了解了 Pydantic 的基本用法和高级特性。现在,你可以开始在 FastAPI 应用中使用 Pydantic 来构建更健壮的 API。