Вопрос проверяет понимание валидаторов в Pydantic — механизма для настройки проверки данных, который позволяет выходить за рамки стандартной валидации типов и добавлять сложную бизнес-логику.
Pydantic — это библиотека для валидации данных и работы с настройками в Python, которая активно использует аннотации типов. Хотя Pydantic отлично справляется с базовой проверкой типов (например, что поле является строкой или целым числом), часто возникают ситуации, когда нужно применить более сложные правила. Именно для этого и существуют валидаторы.
Валидаторы — это методы, помеченные декоратором @validator или @field_validator (в Pydantic V2), которые вызываются для проверки конкретных полей модели. Они получают значение поля, могут его преобразовать, проверить по кастомной логике и либо вернуть валидное значение, либо вызвать ошибку.
Валидаторы применяются везде, где требуется гарантировать целостность и корректность данных перед их использованием. Типичные сценарии:
Рассмотрим простую модель пользователя с валидацией возраста и email.
from pydantic import BaseModel, validator, ValidationError
class User(BaseModel):
name: str
age: int
email: str
@validator('age')
def age_must_be_positive(cls, v):
if v <= 0:
raise ValueError('Возраст должен быть положительным числом')
return v
@validator('email')
def email_must_contain_at(cls, v):
if '@' not in v:
raise ValueError('Некорректный email')
return v.lower() # Нормализуем email к нижнему регистру
# Пример использования
try:
user = User(name="Анна", age=25, email="ANNA@example.com")
print(user) # email будет "anna@example.com"
invalid_user = User(name="Иван", age=-5, email="ivan")
except ValidationError as e:
print(e.errors()) # Выведет ошибки по возрасту и email
Валидаторы в Pydantic — мощный инструмент для обеспечения качества данных. Их стоит применять, когда стандартных возможностей проверки типов недостаточно и требуется внедрить специфичную для предметной области логику валидации, что особенно актуально при разработке API, обработке пользовательского ввода или работе с конфигурациями.
Уровень
Рейтинг:
4
Сложность:
3
Навыки
Python
FastAPI
Ключевые слова
Подпишись на Python Developer в телеграм