发现 Pydantic 的简单性和稳健性
Pydantic 是 Python 的数据验证和设置管理库。它建立在流行的 Python 库 typing 之上,并利用类型提示来验证传递给它的数据。这允许以更健壮和有效的方式验证数据,并提供一种简单的方式来定义和管理应用程序的设置。
以下是如何使用 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 应用程序的绝佳选择。