天天看点

释放 Pydantic 的力量 — Python 数据验证和设置管理综合指南

作者:MikoAndCody

发现 Pydantic 的简单性和稳健性

Pydantic 是 Python 的数据验证和设置管理库。它建立在流行的 Python 库 typing 之上,并利用类型提示来验证传递给它的数据。这允许以更健壮和有效的方式验证数据,并提供一种简单的方式来定义和管理应用程序的设置。

释放 Pydantic 的力量 — Python 数据验证和设置管理综合指南

以下是如何使用 Pydantic 定义简单模型的示例:

from pydantic import BaseModel

class Person(BaseModel):
    name: str
    age: int
    address: str

# 创建 Person 类的实例
person = Person(name="张三", age=30, address="某大街")

# 访问实例的属性
print(person.name) # "张三" 
print(person.age) # 30 
print(person.address) # "某大街"           

您还可以使用嵌套对象、列表和字典定义更复杂的模型。下面是一个包含嵌套对象列表的模型示例:

class PhoneNumber(BaseModel):
    number: str
    type: str

class Person(BaseModel):
    name: str
    age: int
    address: str
    phone_numbers: List[PhoneNumber]

# 创建 Person 的实例 class
person = Person(name="张三", age=30, address="某大街", phone_numbers=[
    PhoneNumber(number="1366666666", type="home"),
    PhoneNumber(number="1388888888", type="work")
])

# 访问电话号码
print(person.phone_numbers[0].number)  # "1366666666" 
print(person.phone_numbers[1].type) # "work"           

Pydantic 还包含许多内置验证,您可以使用它们来验证传递给模型的数据。例如,您可以使用min_length验证来确保字符串字段至少有一定长度:

class Person(BaseModel):
    name: str
    age: int
    address: str
    phone_numbers: List[PhoneNumber]
    bio: str(min_length=50)

#创建Person类的实例
person = Person(name="张三", age=30, address="某大街", phone_numbers=[
    PhoneNumber(number="1366666666", type="home"),
    PhoneNumber(number="1388888888", type="work")
], bio = "这是一个少于 50 个字符的简历")

# 会报错,因为 bio 少于 50 个字符           

您还可以通过将 message 参数传递给验证函数来为每个验证自定义错误消息。

class Person(BaseModel):
    name: str
    age: int
    address: str
    phone_numbers: List[PhoneNumber]
    bio: str(min_length=50, message = '简历应至少为 50 个字符')

#创建Person类的实例
person = Person(name="张三", age=30, address="某大街", phone_numbers=[
    PhoneNumber(number="1366666666", type="home"),
    PhoneNumber(number="1388888888", type="work")
], bio = "这是一个少于 50 个字符的简历")

# 会报错,因为 bio 少于 50 个字符
# 错误提示显示message中的内容: “简历应至少为 50 个字符”           

Pydantic 还包括一种内置的方式来处理字段的默认值。您可以通过将默认值作为参数传递给字段定义来为字段定义默认值:

class Person(BaseModel):
    name: str
    age: int
    address: str = "N/A"
    phone_numbers: List[PhoneNumber]
    bio: str(min_length=50, message = '简历应至少为 50 个字符')

#Creating 一个Person 类的实例
person = Person(name="张三", age=30, phone_numbers=[
    PhoneNumber(number="1366666666", type="home"),
    PhoneNumber(number="1388888888", type="work")
], bio = "这是一个少于 50 个字符的简历")

#地址字段将是“N/A”,因为它没有传入并且有一个默认值           

最后,Pydantic 还包括一种内置方法来处理数据与 JSON 之间的序列化和反序列化。您可以轻松地将 Pydantic 模型转换为 JSON 对象,也可以从 JSON 对象创建 Pydantic 模型。

# 将 Pydantic 模型序列化为 JSON
json_data = person.json()

# 将 JSON 反序列化为 Pydantic 模型
person2 = Person.parse_raw(json_data)           

总之,Pydantic 是一个强大的 Python 数据验证和设置管理库。它利用类型提示来验证数据,并提供一种简单的方法来定义和管理应用程序的设置。它还包括内置验证、默认值处理以及与 JSON 之间的序列化/反序列化,使其成为任何需要处理数据验证和设置管理的 Python 应用程序的绝佳选择。