Ограничения полей и ошибки валидации
Уроки курсаОграничения полей и ошибки валидации
В прошлом уроке модель RoomIn объявляла поля через простые аннотации: name: str и capacity: int. FastAPI проверял тип, но ничего не знал о допустимых значениях — вместимость 0 или имя из одного символа проходили без ошибки. Сейчас добавим правила прямо в объявление поля.
Field(...) как контракт: ge, le, min_length, max_length
Чтобы задать числовые или строковые ограничения, используют Field из pydantic. Выражение с Field записывают справа от =: оно описывает ограничения поля и, при необходимости, его значение по умолчанию. В показанном ниже Field(...) многоточие оставляет поле обязательным без значения по умолчанию.
Первый аргумент Field — это либо многоточие ..., либо конкретное значение по умолчанию. Многоточие означает «поле обязательно»: если клиент не передаст его в теле запроса, FastAPI вернёт 422 не выполняя обработчик.
Для числовых полей:
ge— значение должно быть больше или равно указанному;le— меньше или равно;gtиlt— строго больше и строго меньше.
Для строковых:
min_length— минимальная длина в символах Unicode;max_length— максимальная.
Модель для переговорной выглядит так:
from pydantic import BaseModel, Field
class RoomIn(BaseModel):
name: str = Field(..., min_length=2, max_length=50)
capacity: int = Field(..., ge=1, le=50)
Теперь name обязана содержать от 2 до 50 символов, а capacity — целое число от 1 до 50 включительно. Правила проверяются до того, как управление дойдёт до функции-обработчика: если хотя бы одно нарушено, FastAPI отвечает 422.
