Pydantic的JSONSchema生成和验证
Pydantic是一个Python库,用于数据验证和解析,它使用JSONSchema来生成和验证数据模型。JSONSchema是一种用于描述JSON数据结构的格式规范。
使用Pydantic生成JSONSchema非常简单。下面是一个使用Pydantic生成JSONSchema的示例代码:
from pydantic import BaseModel, Field
class User(BaseModel):
username: str = Field(..., min_length=4, max_length=20)
email: str = Field(..., regex=r'^[a-zA-Z0-9+_.-]+@[a-zA-Z0-9.-]+$')
user_schema = User.schema()
print(user_schema)
上面的代码定义了一个名为User的数据模型,它具有两个属性:username和email。username属性的值必须在4到20个字符之间,而email属性的值必须是一个有效的电子邮件地址。
User.schema()调用生成了User模型的JSONSchema,并将其打印出来。输出结果如下:
{
'title': 'User',
'type': 'object',
'properties': {
'username': {
'title': 'Username',
'type': 'string',
'minLength': 4,
'maxLength': 20
},
'email': {
'title': 'Email',
'type': 'string',
'pattern': '^[a-zA-Z0-9+_.-]+@[a-zA-Z0-9.-]+$'
}
},
'required': ['username', 'email']
}
生成的JSONSchema包含了模型的各种属性信息,如标题、类型、属性约束等。
在使用Pydantic验证数据时,可以使用模型的from_dict方法将JSON数据解析为模型实例,并使用实例的dict方法将模型实例转换为JSON数据。
下面是一个使用Pydantic验证数据的示例代码:
from pydantic import BaseModel, ValidationError, validator
class User(BaseModel):
username: str
email: str
@validator('username')
def validate_username(cls, username):
if len(username) < 4 or len(username) > 20:
raise ValueError('Length of username must be between 4 and 20 characters')
return username
@validator('email')
def validate_email(cls, email):
if not re.match(r'^[a-zA-Z0-9+_.-]+@[a-zA-Z0-9.-]+$', email):
raise ValueError('Invalid email address')
return email
user_data = {
'username': 'john_doe',
'email': 'john_doe@example.com'
}
try:
user = User(**user_data)
print(user.dict())
except ValidationError as e:
print(e)
上面的代码定义了一个User模型,并为username和email属性添加了值验证器。验证器使用validator装饰器,检查属性的值是否符合指定的条件。
user_data包含要验证的用户数据。在try-except中,我们尝试通过User模型的构造函数将user_data解析为User实例。如果数据验证成功,我们通过调用user.dict()方法将User实例转换为JSON数据并打印出来。否则,我们捕获ValidationError异常,并打印出验证失败的详细信息。
总结一下,Pydantic提供了方便的方法来生成和验证JSONSchema。使用Pydantic,我们可以定义数据模型,并使用JSONSchema来验证数据的正确性。
