欢迎访问宙启技术站
智能推送

Pydantic的JSONSchema生成和验证

发布时间:2023-12-15 22:30:03

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来验证数据的正确性。