在构建现代 Web 应用时,我们往往需要处理复杂的输入和输出数据结构。例如,响应数据可能包含嵌套字典、列表、元组,甚至是多个嵌套对象。Pydantic 是一个强大的数据验证和序列化库,可以帮助我们轻松地处理这些复杂的数据结构,并通过自定义方法进行验证和转换。
本文将介绍如何使用 Pydantic 处理复杂数据结构,包括嵌套模型、嵌套字典、列表、元组等,及如何使用自定义方法进行数据验证。
1. Pydantic 简介
Pydantic 通过定义 Python 类并继承 BaseModel
,使得开发者能够轻松定义数据模型并进行自动验证。Pydantic 支持多种数据类型,包括基本类型(如 int
、str
等)和更复杂的类型(如 List
、Dict
、Tuple
、嵌套模型等)。
2. 嵌套模型
2.1 嵌套模型的定义
在许多应用场景中,数据往往具有层级结构。例如,一个订单可能包含多个商品项,每个商品项都有自己的名称、数量和价格。我们可以通过嵌套 Pydantic 模型来处理这种层级结构。
假设我们有以下数据结构:一个订单包含用户信息和多个商品项。我们可以定义两个模型,User
和 Item
,并在 Order
模型中嵌套这两个模型。
from pydantic import BaseModel
from typing import List
class Item(BaseModel):
name: str
quantity: int
price: float
class User(BaseModel):
name: str
email: str
class Order(BaseModel):
user: User
items: List[Item]
total_amount: float
在这个例子中:
Order
模型嵌套了User
和Item
模型。items
字段是一个Item
对象的列表,表示订单中的多个商品项。total_amount
字段表示订单总金额。
2.2 使用嵌套模型
我们可以像下面这样创建一个订单对象:
order_data = {
"user": {
"name": "John Doe", "email": "john.doe@example.com"},
"items": [
{
"name": "Laptop", "quantity": 1, "price": 1200.00},
{