🏠 Домашнее задание
Цель: разработать систему регистрации пользователя, используя Pydantic для валидации входных данных, обработки вложенных структур и сериализации в JSON.
Шаг 1. Подготовка проекта
1
Создай ветку Git
git checkout -b lesson/03-pydantic
2
Создай папку для урока
mkdir flask/lesson-03
cd flask/lesson-03
3
Создай и активируй виртуальное окружение
python -m venv venv
venv\Scripts\activate # Windows
# source venv/bin/activate # macOS / Linux
4
Установи зависимости
pip install pydantic
pip install pydantic[email]
Шаг 2. Создание моделей
5
Создай модель Address
Модель должна содержать поля:
city— строка, минимум 2 символаstreet— строка, минимум 3 символаhouse_number— число, должно быть положительным
6
Создай модель User
Модель должна содержать поля:
name— строка, только буквы, минимум 2 символаage— число, от 0 до 120email— строка, формат emailis_employed— булево значение, статус занятостиaddress— вложенная модель Address
Шаг 3. Валидация
7
Добавь кастомный валидатор
Если is_employed = True, возраст должен быть от 18 до 65 лет. Используй @model_validator(mode='after').
Шаг 4. Функция обработки JSON
8
Реализуй функцию register_user(json_string)
Функция должна:
- Принимать JSON-строку
- Десериализовать её в объект User через
model_validate_json() - В случае успеха сериализовать объект обратно в JSON через
model_dump_json()и вернуть - В случае ошибки вернуть сообщение об ошибке
Шаг 5. Тестирование
9
Напиши примеры JSON для проверки
Создай минимум 4 примера:
- ✅ Успешная регистрация (все данные корректны)
- ❌ Возраст не соответствует статусу занятости (например, 70 лет и is_employed=true)
- ❌ Некорректный email
- ❌ Имя содержит цифры или спецсимволы
Шаг 6. Git
10
Закоммить изменения
git add flask/lesson-03/
git commit -m "feat: урок 03 — система регистрации с Pydantic"
Критерии проверки
- ✅ Модели Address и User созданы корректно
- ✅ Поля имеют ограничения (min_length, gt, ge, le)
- ✅ Вложенная модель address работает
- ✅ Кастомный валидатор проверяет возраст и занятость
- ✅ Функция register_user обрабатывает JSON
- ✅ Есть примеры успешной и неуспешной валидации
- ✅ Код закоммичен в ветку
lesson/03-pydantic