Pydantic: 10 наиболее распространенных моделей использования Python

@python_job_interview разбор вопросов с собеседований Python в нашем канале.
- Базовая валидация данных
Использование модели Pydantic для простой проверки входящих данных.
from pydantic import BaseModel
class User(BaseModel):
name: str
age: int
user = User(name='John Doe', age=30)
- Значения по умолчанию
Определение значения по умолчанию для полей вашей модели.
class User(BaseModel):
name: str
age: int = 18 # Default value
- Необязательные поля
Отметьте поля как необязательные с помощью типа Optional.
from typing import Optional
class User(BaseModel):
name: str
age: Optional[int] = None
- Пользовательские валидаторы
Создавайте пользовательские валидаторы с помощью декоратора @validator.
from pydantic import validator
class User(BaseModel):
name: str
age: int
@validator('age')
def validate_age(cls, value):
if value < 18:
raise ValueError('User must be 18+')
return value
- Вложенные модели
Используйте модели Pydantic для проверки вложенных структур данных.
class Address(BaseModel):
street: str
city: str
class User(BaseModel):
name: str
age: int
address: Address
- Списки моделей
Работа со списками определенной модели.
from typing import List
class User(BaseModel):
name: str
age: int
class UserList(BaseModel):
users: List[User]
- Использование Union
Используйте Union, чтобы позволить полю быть одним из нескольких типов.
from typing import Union
class User(BaseModel):
identifier: Union[str, int]
- Ограничения значений
Накладывайте ограничения на значения с помощью Field.
from pydantic import Field
class User(BaseModel):
name: str
age: int = Field(..., gt=0, lt=120) # Greater than 0, less than 120
- Псевдонимы для полей
Определите псевдонимы для полей модели, что может быть полезно для полей, которые являются ключевыми словами Python.
class User(BaseModel):
name: str
class_: str = Field(alias='class')
- Рекурсивные модели
Создавайте модели, которые могут содержать сами себя.
from typing import Optional
class TreeNode(BaseModel):
value: int
left: Optional['TreeNode'] = None
right: Optional['TreeNode'] = None
TreeNode.update_forward_refs() # Resolve string annotations
+1
1
+1
3
+1
+1
+1