在 Python 的世界中,数据验证和序列化是一个常见的问题。尤其在 Web 开发或数据处理的应用中,我们需要确保接收到的数据结构是正确的,并且可以轻松地转化为其他格式。pydantic 的 BaseModel 提供了一个优雅的解决方案。
什么是 Pydantic 的 BaseModel?
Pydantic 的核心部分是 BaseModel 类,它允许你定义数据类,并自动实现数据验证和序列化。使用 Python 的类型提示功能,BaseModel 可以确保数据满足预期的格式。
为什么选择 Pydantic?
- 类型安全:使用 Python 的类型提示功能。
- 数据验证:自动验证输入数据并提供有意义的错误消息。
- 数据序列化:轻松地将模型转化为 JSON、字典等格式。
- 易于扩展:可以定义自己的验证函数和类型。
基本使用
首先,确保你已经安装了 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")
更多特性
- 默认值和可选字段:
from typing import Optional
class User(BaseModel):
id: int
name: str
age: Optional[int] = None
email: str = "default@email.com"
- 自定义验证函数:
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
- 序列化:
user = User(id=1, name="Alice", age=30, email="alice@example.com")
user_dict = user.dict()
user_json = user.json()
这只是 pydantic 的 BaseModel 的冰山一角。为了更深入地了解其功能和可能性,建议查阅官方文档。