pydantic检验值
时间: 2024-06-14 18:07:16 浏览: 148
djantic:Django ORM的Pydantic模型支持
Pydantic提供了多种validator来进行值的校验。其中包括BeforeValidator、AfterValidator、PlainValidator和WrapValidator。
1. BeforeValidator:在Pydantic内部的校验转换之前执行,可以对输入值进行校验和转换。它的入参为输入值Any,返回值为Any。可以使用多个BeforeValidator来依次对输入值进行校验和转换。
2. AfterValidator:在Pydantic内部的校验转换之后执行,可以对正确的字段类型进行校验和转换。的入参和返回值都是正确的字段类型。可以使用多个AfterValidator来依次对字段类型进行校验和转换。
3. PlainValidator:与BeforeValidator的执行时间相同,但执行完之后整个校验过程结束,不再执行其他validator和Pydantic内部的校验流程。只能有一个PlainValidator。
4. WrapValidator:可以在Pydantic和其他validator之前或之后执行,也可以在返回值或抛出异常时立即结束校验流程。
下面是一个使用Pydantic进行值校验的示例:
```python
from pydantic import BaseModel, validator
class Person(BaseModel):
name: str
age: int
@validator('age')
def validate_age(cls, age):
if age < 0:
raise ValueError("Age must be a positive integer")
return age
person = Person(name="Alice", age=25)
print(person) # 输出:Person name='Alice' age=25
invalid_person = Person(name="Bob", age=-10)
# 输出:pydantic.error_wrappers.ValidationError: 1 validation error for Person
# age
# Age must be a positive integer (type=value_error)
```
在上面的示例中,我们定义了一个Person模型,其中包含name和age字段。通过使用@validator装饰器,我们为age字段添加了一个校验函数validate_age。在这个函数中,我们检查age是否小于0,如果是,则抛出ValueError异常。否则,返回age本身。当创建Person对象时,Pydantic会自动调用校验函数对age进行校验。
阅读全文