🏠 Домашнее задание — закрепление практикума 4

Примечание: Это не LMS-домашнее задание из учебного портала. Это закрепляющее задание для самостоятельной практики, составленное по материалам урока.

⚡ Задание кратко

Реализовать полный API для модели Project: сериализатор с вложенными задачами + endpoints GET/POST/PUT/DELETE. Добавить пагинацию 5 элементов на страницу. Написать ORM-запрос с annotate + filter по дню недели.

← К оглавлению урока

Задание: расширить API управления задачами

На основе проекта management_app из практикума реализовать следующее.

Часть 1: ORM-запросы (Django shell)

Задача А: Задачи без назначенного исполнителя за текущий год

  1. Импортируйте модель Task и модуль timezone.
  2. Напишите запрос, который выберет задачи, у которых:
    • нет назначенного исполнителя (assignee — null)
    • дата создания относится к текущему году
  3. Выведите: название задачи, статус, приоритет.

Задача Б: Топ-3 проекта по количеству задач

  1. Импортируйте модель Project и класс Count.
  2. Напишите запрос, который аннотирует каждый проект количеством задач.
  3. Отсортируйте по убыванию и возьмите первые 3 проекта ([:3]).
  4. Выведите: название проекта, количество задач.

Задача В: Пагинация проектов

  1. Получите все проекты, отсортированные по имени.
  2. Реализуйте пагинацию: 3 проекта на страницу.
  3. Выведите все страницы в цикле, для каждой страницы — список названий проектов.

Часть 2: DRF — расширить API проектов

Задача Г: ProjectDetailSerializer (вложенный)

  1. Создайте сериализатор ProjectDetailSerializer для модели Project.
  2. Включите поля: id, name, date_of_creation.
  3. Добавьте вложенное поле tasks с использованием AllTasksSerializer(many=True).

Задача Д: CRUD для проектов

  1. Напишите view get_project_by_id(request, project_id) — GET детальная информация.
  2. Напишите view create_new_project(request) — POST создание.
  3. Напишите view delete_project(request, project_id) — DELETE удаление.
  4. Зарегистрируйте все три endpoints в urls.py.
  5. Проверьте работу через 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-задач

  1. Откройте терминал в VS Code: Ctrl+`
  2. Активируйте venv: .venv\Scripts\activate
  3. Запустите shell: python manage.py shell
  4. Вводите код задач построчно или блоками

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/

← К оглавлению урока