Проверить проект https://buschwacker.pythonanywhere.com можно через любой известный сервис, например Postman.
Логин/пароль администратора admin
/admin
Получить доступ к сервису можно с помощью POST запроса к https://buschwacker.pythonanywhere.com/auth/jwt/create/
Посмотреть документацию можно тут redoc или swagger.
Нужно было написать веб-сервис предоставляющий RESTful API для управления персональным списком задач.
Необходимо было реализовать сервис, предоставляющий API (REST) для управления персональным списком задач. Сервис должен предоставлять следующие функции (каждая из этих функций должна быть представлена отдельным URL/Эндпоинтом API):
- Получение списка задач,
- Создание новой задачи,
- Получение конкретной задачи по id,
- Отметка задачи как выполненной,
- Удаление задачи.
- Заголовок
- Текст задачи
- Дата выполнения
- Заголовок
- Текст задачи
- Дата выполнения
- Отметка о факте выполнения
Модель включает в себя поля title
, text
, deadline_on
, заголовок, текст задачи и дата до, которой нужно выполнить задачу соответственно. Данные поля являются обязательными.
Так как список задач должен быть персональным, решено было добавить поле author
, (ManyToOne к стандартной модели User).
Для отметки факта успешного выполнения задачи добавлено поле is_done
.
Также добавлено поле, работающее на чтение is_failed
, возвращающее True
в случае если задача не выполнена и прошел срок её выполнения.
Также для удобства сортировки выполненных задач по времени их выполнения было добавлено поле done_at
. В тот момент как задача помечается как выполненная в поле записывается время.
По умолчанию задачи сортированы в порядке приоритетности их выполнения. В начале невыполненные с ближайшим дедлайном.
Класс TaskViewSet
обрабатывает запросы к эндпоинтам проекта
Так стандартные миксины: CreateModelMixin
, DestroyModelMixin
, ListModelMixin
, RetrieveModelMixin
, от которых наследуется TaskViewSet
позволяют обработать запрос на получение списка задач, получение задачи по id, создание и удаление задач.
Запросы к остальным энпоинтам обрабатываются методами класса TaskViewSet
, обернутых декоратором @action
.
Посмотреть документацию можно тут redoc или swagger.
GET /api/tasks/
возвращает список невыполненных и непроваленных задач пользователя, отсортировано по приоритетности их выполнения(дедлайн близко).POST /api/tasks/
создает задачу текущего пользователя, достаточно заполнить текст задачи, заголовок и дедлайн.GET /api/tasks/<id_task>/
возвращает информацию о задаче, если эта задача принадлежит текущему пользователю.DELETE /api/tasks/<id_task>/
возвращает информацию о задаче, если эта задача принадлежит текущему пользователю.PATCH /api/tasks/<id_task>/done_task/
отмечает задачу как выполненную, если она принадлежит текущему пользователю.GET /api/tasks/done/
возвращает список выполненных задач пользователя, отсортировано по дате их выполнения.GET /api/tasks/failed/
возвращает список проваленных задач пользователя, отсортировано по дедлайну.GET /api/tasks/urgent/
возвращает список срочных к выполнению задач пользователя(дедлайн меньше чем через день), отсортировано по приоритетности их выполнения(дедлайн близко).
Список JWT эндпоинтов доступны в документации по ссылке.
Сериализатор TaskSerializer
позволяет возвращать поля id, title, text, deadline_on, is_done, is_failed, done_at, author
и создавать задачу при заполнении полей title, text, deadline_on
.
Делает поля is_done, is_failed, author
недоступными для записи. author
заполняется значением текущего пользователя в методе вьюсета def perform_create
.
Проверяет что значение поля deadline_on
(дедлайн) не меньше текущего времени.
Перед написанием основного кода были написаны тесты(директория tests). Использовалась методология TDD. Описание каждого из тестов в докстрингах методов класса TestView
.
При совершении триггер-действия(пуш в ветку main
):
- Проект разворачивается на тестовом сервере
- Запуск тестов
- Проверка кода всего проекта на соответствие стилю PEP8
- Отправка сообщения в телеграм об успешности выполнения вышеперечисленных инструкций
- Скачиваем репозиторий
- Устанавливаем и активируем виртуальное окружение
- Устанавливаем зависимости
pip install -r requirements.txt