REST API для асинхронного выполнения задач с использованием Django, DRF и Celery.
- Python 3.11
- Django 5.0
- Django REST Framework
- Celery
- Redis
- JWT Authentication
- PostgreSQL
- Docker
- Клонируйте репозиторий:
git clone <repository-url>
cd <project-directory>-
Создайте файл .env на основе .env.example
-
Запустите проект:
docker-compose up --buildВыполнить миграции:
docker-compose exec web python manage.py migrateПриложение будет доступно по адресу: http://localhost:8000
-
POST /api/register/- Регистрация нового пользователя{ "username": "user", "password": "password", } -
POST /api/token/- Получение JWT токена{ "username": "user", "password": "password" }
-
GET /api/tasks/- Получение списка задач (с пагинацией)- Поддерживает фильтрацию по статусу:
?status=pending
- Поддерживает фильтрацию по статусу:
-
POST /api/tasks/- Создание новой задачи{ "task_type": "sum", "input_data": { "values" : [1,2,3,10], "scheduled_at": "2024-01-18 15:30:00" }, }или
{ "task_type": "countdown", "input_data": { "seconds": 30, "scheduled_at": "2024-02-20T12:30:00Z" }, } -
GET /api/tasks/{id}/- Получение информации о конкретной задаче
Система поддерживает планирование задач на определенное время:
- Время указывается в параметре
scheduled_at - Поддерживается московское время (Europe/Moscow)
- Можно использовать следующие форматы:
- Без указания зоны (считается московским):
"2024-02-20 15:30:00" - С указанием зоны (конвертируется в московское):
"2024-02-20T12:30:00Z"
- Без указания зоны (считается московским):
- Нельзя запланировать задачу на прошедшее время
- Если время не указано, задача выполняется немедленно
- Пользователь может иметь не более 5 активных задач одновременно
- Поддерживаются два типа задач:
sum- сложение чиселcountdown- обратный отсчет
pending- задача создана и ожидает выполненияstarted- задача выполняетсяsuccess- задача успешно завершенаfailure- произошла ошибка при выполнении задачи
- Фильтрация задач по статусу
- Автоматическая конвертация времени в московский часовой пояс
- Изоляция задач между пользователями (каждый пользователь видит только свои задачи)
- Пагинация списка задач (20 задач на страницу)