【发布时间】:2022-01-19 19:08:39
【问题描述】:
我想知道有什么区别:
from pydantic import BaseModel, Field
class Person(BaseModel):
name: str = Field(..., min_length=1)
还有:
from pydantic import BaseModel, constr
class Person(BaseModel):
name: constr(min_length=1)
两者似乎都执行相同的验证(即使name 为空字符串时也会引发完全相同的异常信息)。这只是代码风格的问题吗?其中一个比另一个更受欢迎吗?
另外,如果我想包含一个非空字符串列表作为属性,您认为以下哪种方式更好?:
from typing import List
from pydantic import BaseModel, constr
class Person(BaseModel):
languages: List[constr(min_length=1)]
或者:
from typing import List
from pydantic import BaseModel, Field
class Person(BaseModel):
languages: List[str]
@validator('languages', each_item=True)
def check_nonempty_strings(cls, v):
if not v:
raise ValueError('Empty string is not a valid language.')
return v
编辑: FWIW,我将其用于 FastAPI 应用程序。
编辑2: 对于我的第二个问题,我认为第一个替代方案更好,因为它包括架构中的长度要求(因此它在文档中)
【问题讨论】:
标签: python validation fastapi typing pydantic