Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Python: Pydantic, validation, data models, type hints, Python

Какие ограничения и правила можно задавать в моделях Pydantic?

Вопрос проверяет знание возможностей валидации данных в Pydantic, что необходимо для создания надежных и безопасных API-эндпоинтов.

Короткий ответ

В Pydantic модели позволяют задавать правила валидации и преобразования данных через аннотации типов Python. Можно использовать встроенные типы (int, str, list), специальные типы Pydantic (EmailStr, conint), а также создавать собственные валидаторы с помощью декоратора @validator. Модели автоматически проверяют типы данных, приводят их при возможности и выбрасывают ValidationError при несоответствии. Это гарантирует, что входящие данные соответствуют ожидаемой структуре.

Длинный ответ

Pydantic — это библиотека для валидации данных и управления настройками в Python, которая широко используется в веб-фреймворках, таких как FastAPI. Её основная сила заключается в использовании аннотаций типов Python для определения структуры данных и автоматической проверки входящей информации.

Основные типы ограничений

Вы можете использовать стандартные типы Python и специальные типы из Pydantic для описания полей модели.

  • Стандартные типы: int, str, float, bool, list, dict, Optional, Union.
  • Специальные типы Pydantic: EmailStr, HttpUrl, PastDate, FutureDate, conint (ограниченное целое), constr (ограниченная строка).

Правила валидации через Field

Функция Field позволяет задавать дополнительные метаданные и ограничения для поля.

from pydantic import BaseModel, Field, validator

class User(BaseModel):
    name: str = Field(..., min_length=1, max_length=50)
    age: int = Field(ge=0, le=120, description="Возраст пользователя")
    email: str = Field(regex=r"^[\w\.-]+@[\w\.-]+\.\w+$")
    score: float = Field(default=0.0, gt=0)

В этом примере: поле name обязательное (многоточие) и имеет ограничения по длине; age должно быть между 0 и 120; email проверяется регулярным выражением; score имеет значение по умолчанию и должно быть больше 0.

Пользовательские валидаторы

Для сложной логики можно создать собственный валидатор с помощью декоратора @validator.

from pydantic import BaseModel, validator

class Product(BaseModel):
    name: str
    price: float
    discount_price: float

    @validator('discount_price')
    def check_discount(cls, v, values):
        if 'price' in values and v >= values['price']:
            raise ValueError('Скидочная цена должна быть меньше обычной')
        return v

Этот валидатор проверяет, что цена со скидкой меньше обычной цены. Параметр values содержит уже проверенные значения других полей.

Валидация на уровне модели

Декоратор @root_validator позволяет проверять взаимосвязи между несколькими полями после их валидации.

from pydantic import BaseModel, root_validator

class Order(BaseModel):
    items: list[str]
    total: float

    @root_validator
    def check_total_positive(cls, values):
        if values.get('total', 0) <= 0:
            raise ValueError('Итоговая сумма должна быть положительной')
        return values

Такой подход полезен, когда правило зависит от комбинации полей.

Вывод: Pydantic предоставляет мощный и гибкий инструментарий для валидации данных, от простых проверок типов до сложной бизнес-логики. Его стоит применять везде, где требуется гарантировать корректность входящих данных, особенно при разработке API, обработке конфигураций или работе с внешними источниками данных.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • Python

    Python

  • FastAPI

    FastAPI

Ключевые слова

#Pydantic

#validation

#data models

#type hints

#Python

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.