小编asm*_*tin的帖子

Pydantic constr 与 Field args

我想知道以下之间有什么区别:

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:对于我的第二个问题,我认为第一个替代方案更好,因为它包含架构中的长度要求(因此它在文档中)

python validation typing pydantic fastapi

19
推荐指数
1
解决办法
2万
查看次数

标签 统计

fastapi ×1

pydantic ×1

python ×1

typing ×1

validation ×1