🏠 Домашнее задание — закрепление практикума 4
Примечание: Это не LMS-домашнее задание из учебного портала. Это закрепляющее задание для самостоятельной практики, составленное по материалам урока.
⚡ Задание кратко
Реализовать полный API для модели Project: сериализатор с вложенными задачами + endpoints GET/POST/PUT/DELETE. Добавить пагинацию 5 элементов на страницу. Написать ORM-запрос с annotate + filter по дню недели.
Задание: расширить API управления задачами
На основе проекта management_app из практикума реализовать следующее.
Часть 1: ORM-запросы (Django shell)
Задача А: Задачи без назначенного исполнителя за текущий год
- Импортируйте модель
Taskи модульtimezone. - Напишите запрос, который выберет задачи, у которых:
- нет назначенного исполнителя (
assignee— null) - дата создания относится к текущему году
- нет назначенного исполнителя (
- Выведите: название задачи, статус, приоритет.
Задача Б: Топ-3 проекта по количеству задач
- Импортируйте модель
Projectи классCount. - Напишите запрос, который аннотирует каждый проект количеством задач.
- Отсортируйте по убыванию и возьмите первые 3 проекта (
[:3]). - Выведите: название проекта, количество задач.
Задача В: Пагинация проектов
- Получите все проекты, отсортированные по имени.
- Реализуйте пагинацию: 3 проекта на страницу.
- Выведите все страницы в цикле, для каждой страницы — список названий проектов.
Часть 2: DRF — расширить API проектов
Задача Г: ProjectDetailSerializer (вложенный)
- Создайте сериализатор
ProjectDetailSerializerдля моделиProject. - Включите поля:
id,name,date_of_creation. - Добавьте вложенное поле
tasksс использованиемAllTasksSerializer(many=True).
Задача Д: CRUD для проектов
- Напишите view
get_project_by_id(request, project_id)— GET детальная информация. - Напишите view
create_new_project(request)— POST создание. - Напишите view
delete_project(request, project_id)— DELETE удаление. - Зарегистрируйте все три endpoints в
urls.py. - Проверьте работу через Postman или браузер.
Подготовка окружения
# 1. Создать виртуальное окружение (если ещё нет)
python -m venv .venv
# 2. Активировать
# Windows:
.venv\Scripts\activate
# macOS/Linux:
source .venv/bin/activate
# 3. Установить зависимости
pip install django djangorestframework
# 4. Убедиться, что проект management_app существует
python manage.py check
# 5. Если нужны миграции
python manage.py makemigrations
python manage.py migrate
# 6. Запустить сервер разработки для тестирования DRF-endpoints
python manage.py runserver
Проверка в VS Code
Запуск shell для ORM-задач
- Откройте терминал в VS Code: Ctrl+`
- Активируйте venv:
.venv\Scripts\activate - Запустите shell:
python manage.py shell - Вводите код задач построчно или блоками
launch.json для запуска сервера
{
"version": "0.2.0",
"configurations": [
{
"name": "Django: runserver",
"type": "debugpy",
"request": "launch",
"program": "${workspaceFolder}/manage.py",
"args": ["runserver"],
"django": true,
"justMyCode": true
}
]
}
Сохранить в .vscode/launch.json, затем нажать F5.
Тестирование endpoints в браузере
После запуска сервера откройте DRF Browsable API:
http://127.0.0.1:8000/management_app/projects/http://127.0.0.1:8000/management_app/tasks/http://127.0.0.1:8000/management_app/tags/http://127.0.0.1:8000/management_app/tags/1/
Тестирование через Postman
- GET
/management_app/tags/— список тегов - POST
/management_app/tags/create/→ Body (JSON):{"name": "NewTag"} - PUT
/management_app/tags/1/update/→ Body:{"name": "UpdatedTag"} - DELETE
/management_app/tags/1/delete/
Связь с теорией и примерами
- ORM-запросы из задач А–В: Theory: ORM, Примеры 2–5
- ModelSerializer и вложенные поля: Theory: DRF, Пример 7
- CRUD endpoints: Решения 16–19, Справочник: view-шаблоны
- Порядок URL: Справочник: регистрация URL, Ошибка 4