one*_*or0 2 python validation pydantic
为什么 pydantic 不验证 Foo 对象列表的参数,但当参数是基本类型列表时抛出 ValidationError ?
我可以强制执行复杂类型的验证吗?
验证不起作用:
from typing import List
from pydantic import BaseModel
class Foo(BaseModel):
kind: str = "foo"
class Bar(BaseModel):
kind: str = "bar"
class Spam(BaseModel):
foos: List[Foo]
spam = Spam(foos=[Bar()])
print(spam.dict())
>>> {'foos': [{'kind': 'bar'}]}
Run Code Online (Sandbox Code Playgroud)
验证工作:
class Spam(BaseModel):
foos: List[int]
spam = Spam(foos=[Bar()])
print(spam.dict())
pydantic.error_wrappers.ValidationError: 1 validation error for Spam
foos -> 0
value is not a valid integer (type=type_error.integer)
Run Code Online (Sandbox Code Playgroud)
使用 时pydantic,应记住:
pydantic主要是一个解析库,而不是验证库。验证是达到目的的一种手段:构建符合所提供的类型和约束的模型。
换句话说,pydantic 保证输出模型的类型和约束,而不是输入数据。
为了对传入数据进行额外验证,提供了一个工具 -验证器。例如:
class Spam(BaseModel):
foos: List[Foo]
@validator('foos', pre=True, each_item=True)
def check_squares(cls, v):
assert isinstance(v, Foo), "Foo is only allowed"
return v
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10038 次 |
| 最近记录: |