Pydantic 的 BaseModel:强类型的数据验证与序列化工具

1,498 阅读2分钟

在 Python 的世界中,数据验证和序列化是一个常见的问题。尤其在 Web 开发或数据处理的应用中,我们需要确保接收到的数据结构是正确的,并且可以轻松地转化为其他格式。pydanticBaseModel 提供了一个优雅的解决方案。

什么是 Pydantic 的 BaseModel?

Pydantic 的核心部分是 BaseModel 类,它允许你定义数据类,并自动实现数据验证和序列化。使用 Python 的类型提示功能,BaseModel 可以确保数据满足预期的格式。

为什么选择 Pydantic?

  1. 类型安全:使用 Python 的类型提示功能。
  2. 数据验证:自动验证输入数据并提供有意义的错误消息。
  3. 数据序列化:轻松地将模型转化为 JSON、字典等格式。
  4. 易于扩展:可以定义自己的验证函数和类型。

基本使用

首先,确保你已经安装了 pydantic

pip install pydantic

接着,你可以定义你的数据模型:

from pydantic import BaseModel

class User(BaseModel):
    id: int
    name: str
    age: int
    email: str

现在,当你创建一个 User 对象时,pydantic 会自动验证数据:

user = User(id=1, name="Alice", age=30, email="alice@example.com")

但如果数据不满足预期的格式,你会收到一个错误消息:

# 这会抛出一个 ValidationError,因为 'age' 不是字符串
invalid_user = User(id=1, name="Alice", age="thirty", email="alice@example.com")

更多特性

  1. 默认值和可选字段
from typing import Optional

class User(BaseModel):
    id: int
    name: str
    age: Optional[int] = None
    email: str = "default@email.com"
  1. 自定义验证函数
from pydantic import validator

class User(BaseModel):
    id: int
    name: str
    age: int
    email: str

    @validator("age")
    def validate_age(cls, age):
        if age <= 0:
            raise ValueError("Age must be a positive number")
        return age
  1. 序列化
user = User(id=1, name="Alice", age=30, email="alice@example.com")
user_dict = user.dict()
user_json = user.json()

这只是 pydanticBaseModel 的冰山一角。为了更深入地了解其功能和可能性,建议查阅官方文档。