Тестовый проект: мини-сервис аналитики заказов
Python, Django REST Framework, HTTPS, PostgreSQL, Postman
💡 ВЕРСИЯ Python 3.10
Cоздать и активировать виртуальное окружение:
python3 -m venv venv
-
Если у вас Linux/macOS
source venv/bin/activate -
Если у вас Windows (в Git Bash)
source venv/Scripts/activate
python3 -m pip install --upgrade pipУстановить зависимости из файла requirements.txt:
pip install -r requirements.txtВыполнить миграции:
python3 manage.py migrateСоздать суперпользователя:
python3 manage.py createsuperuserЗапустить проект:
python3 manage.py runserverПосле запуска сервера доступна интерактивная документация:
- Swagger UI: http://localhost:8000/schema/swagger/
- ReDoc: http://localhost:8000/schema/redoc/
POST http://localhost:8000/api/orders/upload/
Загрузка и обновление заказов пользователя. При повторной загрузке заказа с тем же order_number происходит обновление.
Тело запроса:
{
"user": "test_seller",
"orders": [
{
"order_number": "12345",
"created_at": "2025-11-12T10:00:00Z",
"total_amount": 2500.00,
"status": "delivered",
"items": [
{
"sku": "tea01",
"name": "Чай зелёный",
"quantity": 2,
"price": 500
},
{
"sku": "cup01",
"name": "Чашка фарфоровая",
"quantity": 1,
"price": 1500
}
]
}
]
}Успешный ответ (201 Created):
{
"message": "Заказы успешно загружены/обновлены.",
"statistics": {
"created_orders": 1,
"updated_orders": 0,
"created_items": 2
}
}GET http://localhost:8000/api/orders/stats/?user=test_seller
Получение статистики по заказам пользователя. Параметры: user (обязательный) - имя пользователя.
Успешный ответ (200 OK):
{
"user": "test_seller",
"orders_count": 10,
"total_revenue": 12345.67,
"avg_order_value": 1234.57
}User (Пользователь)
username- уникальное имя пользователя
Order (Заказ)
user- ссылка на пользователяorder_number- уникальный номер заказаcreated_at- дата созданияtotal_amount- общая сумма заказаstatus- статус заказа
OrderItem (Товар заказа)
order- ссылка на заказsku- артикул товараname- название товараquantity- количество товараprice- стоимость товара
DailyOrderStats (Хранения ежедневной статистики заказов)
date- дата статистикиtotal_users- всего пользователейtotal_orders- всего заказовtotal_revenue- общая выручкаavg_order_value- средний чекcreated_at- дата создания
Система автоматически собирает ежедневную статистику по заказам с использованием Celery и Redis. Статистика рассчитывается каждый день в полночь и включает:
- Общее количество пользователей с заказами
- Общее количество заказов
- Общую выручку
- Средний чек
Убедитесь, что установлены все зависимости:
pip install celery redisПроверка работы Redis:
redis-cli pingдолжен вернуться ответ: PONG.
Для работы системы необходимо запустить три процесса одновременно:
redis-servercelery -A config worker --loglevel=infocelery -A config beat --loglevel=infopython manage.py runserver- Проверка подключения Redis
redis-cli
127.0.0.1:6379> pingдолжен вернуться ответ: PONG.
- Проверка подключения Celery
В логах Celery worker вы должны видеть:
[config.celery] ready
- Ручной запуск задачи для тестирования
python manage.py shell
from orders.tasks import daily_order_stats
# Асинхронный запуск
daily_order_stats.delay()
# Или синхронный запуск для отладки
daily_order_stats()- 📊 Просмотр статистики через API
GET http://localhost:8000/api/daily-stats/daily_stats/
Для минимизации трудностей во время разработки и поддержании высокого качества кода в разработке мы используем pre-commit. Данный фреймворк позволяет проверить код на соответствие PEP8, защитить ветки master и develop от непреднамеренного коммита, проверить корректность импортов и наличие trailing spaces.
Pre-commit конфигурируется с помощью специального файл .pre-commit-config.yaml. Для использования фреймворка его необходимо установить, выполнив команду из активированного виртуального окружения:
pip install pre-commit==3.6.0или
pip install -r requirements.txtДля принудительной проверки всех файлов можно выполнить команду:
pre-commit run --all-filesПри первом запуске будут скачаны и установлены все необходимые хуки, указанные в конфигурационном файле.
Для автоматической проверки всех файлов необходимо инициализировать фреймворк командой:
pre-commit install