pydantic
pydantic - топ либа
Валидаторы
- Всегда надо вернуть какое-то значение или
ValueError
/AssertionError
class UserModel(BaseModel):
name: str
@validator('name')
def name_must_contain_space(cls, v, values, **kwargs):
if ' ' not in v:
raise ValueError('must contain a space')
return v.title()
v
- значение поля-
values
- словарь других полей- ВАЖНО: в словаре будут лишь те поля, которые находятся выше целевого поля:
-
@validator(..., pre=True)
- валидатор будет вызван перед основной валидацией; полезно, когда нужно сделать парсинг:class DemoModel(BaseModel): square_numbers: List[int] = [] @validator('square_numbers', pre=True) def split_str(cls, v): if isinstance(v, str): return v.split('|') return v
- ^ то есть
square_numbers
- это список интов, но можно передать и строку, которая распарсится в список @validator(..., always=True)
- запуск валидатора, даже если поле не заполнено; полезно, когда нужно собрать значение по умолчанию из других полей (=> используем вместе сvalues
)- Хотя для простых ситуаций лучше использовать
Field(default_factory=...)
- А для комплексных -
@root_validator
:
- ^ то есть