BaseModel, и указывают её типом параметра endpoint. FastAPI проверяет обязательные поля, типы, ограничения и возвращает ответ с ошибкой валидации, если данные не соответствуют схеме.
Как реализовать валидацию входных данных через Pydantic?
Подробный ответ
Базовая Pydantic-модель
Pydantic-модель описывает контракт входящих данных через типы Python. FastAPI читает эту схему, получает JSON из тела запроса, проверяет его и передаёт в endpoint уже валидированный объект.
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class ArticleCreate(BaseModel):
title: str
text: str
is_published: bool = False
@app.post('/articles')
def create_article(article: ArticleCreate):
return articleОграничения полей
Для строк, чисел и других типов можно задавать дополнительные правила через Field. Например, ограничить длину заголовка или минимальное значение цены.
from pydantic import BaseModel, Field
class ProductCreate(BaseModel):
title: str = Field(min_length=3, max_length=200)
price: float = Field(gt=0)
quantity: int = Field(ge=0)Собственная проверка
Если правило зависит от нескольких полей или не выражается обычным ограничением, добавляют Pydantic validator.
from pydantic import BaseModel, field_validator
class UserCreate(BaseModel):
password: str
@field_validator('password')
@classmethod
def validate_password(cls, value: str) -> str:
if len(value) < 8:
raise ValueError('Password must contain at least 8 characters')
return valueЧто происходит при ошибке
Если обязательного поля нет, тип значения не совпадает или правило нарушено, FastAPI автоматически возвращает клиенту ответ с деталями ошибки. Не нужно вручную писать проверку каждого поля в endpoint.
Разделение схем
На практике удобно создавать разные схемы для создания, обновления и ответа. Например, в UserCreate может быть пароль, но в UserRead пароль возвращать нельзя.
Как ответить на собеседовании
Я описываю входные данные Pydantic-моделью на основе BaseModel и передаю её в endpoint как тип параметра. Для ограничений использую Field, а для сложных правил — validators. FastAPI сам валидирует запрос и возвращает структурированную ошибку, если схема не проходит проверку.
Оцени свой прогресс