📝 Fastapi

Pydantic v2 в FastAPI

P
Автор
Pyland
📅
Опубликовано
30.06.2026
⏱️
Время чтения
1 мин
👁️
Просмотров
80
🌿
Уровень
Средний
🐦 💼 ✈️

FastAPI использует Pydantic для валидации и сериализации данных.

Базовые модели

from pydantic import BaseModel, Field
from datetime import datetime

class TaskCreate(BaseModel):
    title: str = Field(min_length=1, max_length=200)
    description: str | None = None
    priority: int = Field(default=1, ge=1, le=3)
    status: str = "todo"

class TaskResponse(BaseModel):
    id: int
    title: str
    status: str
    created_at: datetime

    model_config = {"from_attributes": True}  # для работы с ORM

Использование в FastAPI

@app.post("/tasks/", response_model=TaskResponse, status_code=201)
def create_task(task: TaskCreate):
    db_task = Task(**task.model_dump())
    db.add(db_task)
    db.commit()
    return db_task

Валидаторы

from pydantic import field_validator, model_validator

class TaskCreate(BaseModel):
    title: str
    due_date: str | None = None

    @field_validator('title')
    @classmethod
    def title_not_empty(cls, v):
        if not v.strip():
            raise ValueError('Заголовок не может быть пустым')
        return v.strip()

    @model_validator(mode='after')
    def check_dates(self):
        # валидация на уровне модели
        return self

Computed fields

from pydantic import computed_field

class TaskResponse(BaseModel):
    title: str
    status: str

    @computed_field
    @property
    def is_done(self) -> bool:
        return self.status == 'done'

model_dump и model_validate

task = TaskCreate(title='Задача', priority=2)

# В словарь
task.model_dump()
# {'title': 'Задача', 'description': None, 'priority': 2, 'status': 'todo'}

task.model_dump(exclude_none=True)
# {'title': 'Задача', 'priority': 2, 'status': 'todo'}

# Из словаря
data = {'title': 'Задача', 'priority': 3}
TaskCreate.model_validate(data)

Схемы для разных операций

class TaskBase(BaseModel):
    title: str
    priority: int = 1

class TaskCreate(TaskBase):
    pass

class TaskUpdate(BaseModel):
    title: str | None = None
    priority: int | None = None
    status: str | None = None

class TaskResponse(TaskBase):
    id: int
    created_at: datetime
    model_config = {"from_attributes": True}

Ваша реакция на статью

💬 Комментарии (0)

🔐 Войдите в систему, чтобы оставить комментарий
🚪 Войти
💭

Комментариев пока нет

Станьте первым, кто поделится мнением об этой статье!

🔗 Похожие

Похожие статьи

Продолжите изучение с этими материалами

📝

Middleware и CORS в FastAPI

Позволяет браузерным клиентам обращаться к API с другого домена.

📅 30.06.2026 👁️ 88
📝

HTTPException в FastAPI

Охватываемые темы: Базовое использование, Коды статуса, Детали ошибки, Кастомные заголовки.

📅 30.06.2026 👁️ 91
📝

Dependency Injection в FastAPI

Depends — система внедрения зависимостей FastAPI для переиспользования кода.

📅 30.06.2026 👁️ 85

Понравилась статья?

Подпишитесь на наши обновления и получайте новые статьи первыми. Развивайтесь вместе с PyLand!