Ответ
Pydantic — это библиотека для валидации данных и управления настройками с использованием аннотаций типов Python. Она обеспечивает строгую проверку типов и структуры данных во время выполнения программы.
Ключевые возможности:
- Валидация данных: Автоматически проверяет, соответствуют ли входящие данные (например, из JSON-запроса) типам, указанным в модели.
- Парсинг и приведение типов: Умеет преобразовывать данные в нужные типы (например, строку
'2023-01-01'в объектdatetime). - Сериализация: Легко преобразует объекты моделей в словари или JSON.
- Генерация JSON Schema: Автоматически создает схемы данных, которые используются для генерации документации API (например, в FastAPI).
- Кастомные валидаторы: Позволяет определять собственные функции для сложной логики проверки полей.
Пример базовой модели:
from pydantic import BaseModel, EmailStr, PositiveInt, field_validator
from typing import List
class User(BaseModel):
id: PositiveInt
name: str
email: EmailStr
tags: List[str] = []
# Кастомный валидатор
@field_validator('name')
def name_must_contain_space(cls, v):
if ' ' not in v:
raise ValueError('must contain a space')
return v.title()
# Создание экземпляра с валидацией
try:
user_data = {"id": 123, "name": "john doe", "email": "john.doe@example.com"}
user = User(**user_data)
# Сериализация в JSON
print(user.model_dump_json(indent=2))
except ValueError as e:
print(e)
Основные сценарии использования:
- API: Валидация тел запросов и ответов (основа FastAPI).
- Управление конфигурацией: Загрузка и валидация настроек из файлов или переменных окружения.
- ETL-процессы: Обеспечение корректности данных на этапах извлечения и преобразования.
Ответ 18+ 🔞
Слушай, а вот эта ваша Pydantic — ну просто пиздец, как удобно, блядь! Представь: ты пишешь на Python, а у тебя данные летят отовсюду — из JSON'ов, с фронта, из конфигов. И вместо того чтобы вручную, как лох, писать кучу if'ов на проверку, ты просто объявляешь, как эти данные должны выглядеть. И всё, сука, библиотека сама за тебя всё проверит, приведёт к нужному типу и даже по морде надаёт, если что-то не так.
Что она умеет, эта мартышлюшка:
- Валидация данных: Ты говоришь: «Поле
idдолжно быть положительным числом». А если прилетит строка или отрицательное — получишь ошибку, даже не успев моргнуть. - Парсинг и приведение типов: Это вообще магия, ёпта. Написал, что поле
date— этоdatetime, а тебе пришла строка'2023-01-01'. Pydantic её спокойно превратит в настоящий объект даты. Не надо самому сstrptimeебаться. - Сериализация: Сделал из входящих данных красивый объект-модель, поработал с ним — и на выход легко превращаешь обратно в словарь или JSON. Одна строчка, блядь!
- JSON Schema: А вот это для APIшек просто овердохуище полезно. Библиотека сама генерирует схему твоих данных, и её, например, FastAPI сразу в красивую документацию превращает. Ничего делать не надо!
- Кастомные валидаторы: Если стандартных проверок мало — хуй с ними, напиши свою. Хоть проверь, что имя содержит пробел, хоть что пароль достаточно сложный.
Смотри, как это выглядит на практике:
from pydantic import BaseModel, EmailStr, PositiveInt, field_validator
from typing import List
class User(BaseModel):
id: PositiveInt # Только положительные, иначе — пиздец
name: str
email: EmailStr # Да-да, она даже email проверит на адекватность!
tags: List[str] = [] # Можно и список по умолчанию задать
# А вот твой кастомный валидатор, хитрая жопа
@field_validator('name')
def name_must_contain_space(cls, v):
if ' ' not in v:
raise ValueError('Должен быть пробел, ёпта!') # Сам пишешь сообщение об ошибке
return v.title() # И даже можешь данные на ходу поправить
# Пробуем создать пользователя
try:
user_data = {"id": 123, "name": "john doe", "email": "john.doe@example.com"}
user = User(**user_data) # Всё прокатит
# А теперь смотрим, во что это превратилось
print(user.model_dump_json(indent=2))
except ValueError as e:
print(f"Ошибка, чувак: {e}") # Поймаем, если что-то не так
Где это всё, блядь, пригождается:
- API (особенно FastAPI): Это вообще родной дом для Pydantic. Все запросы и ответы валидируются через неё. Удобно — пиздец.
- Конфигурация приложения: Загружаешь настройки из
.envфайла илиyaml— и сразу получаешь валидированный объект. Никаких сюрпризов. - ETL и обработка данных: Когда тащишь данные из одной помойки в другую, важно убедиться, что они не развалились по дороге. Pydantic как раз стоит на страже и не пропускает кривые данные дальше.
Короче, если ты ещё не юзаешь Pydantic — ты просто мудак, блядь. Это одна из тех библиотек, после которой жить становится реально проще.