我想知道以下之间有什么区别:
from pydantic import BaseModel, Field
class Person(BaseModel):
name: str = Field(..., min_length=1)
Run Code Online (Sandbox Code Playgroud)
和:
from pydantic import BaseModel, constr
class Person(BaseModel):
name: constr(min_length=1)
Run Code Online (Sandbox Code Playgroud)
name两者似乎都执行相同的验证(甚至在为空字符串时引发完全相同的异常信息)。这只是代码风格的问题吗?其中一个比另一个更受青睐吗?
另外,如果我想包含一个非空字符串列表作为属性,您认为以下哪种方式更好?:
from typing import List
from pydantic import BaseModel, constr
class Person(BaseModel):
languages: List[constr(min_length=1)]
Run Code Online (Sandbox Code Playgroud)
或者:
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
Run Code Online (Sandbox Code Playgroud)
编辑:FWIW,我将其用于 FastAPI 应用程序。
编辑2:对于我的第二个问题,我认为第一个替代方案更好,因为它包含架构中的长度要求(因此它在文档中)