Статус: В разработке.
Проект представляет собой интернет‑магазин, в котором взаимодействие между клиентским приложением (веб‑сайт, мобильное приложение) и серверной частью реализовано через REST API.
На текущем этапе реализованы:
- каталог товаров;
- корзина для покупок;
- админ‑панель для управления содержимым каталога.
- Архитектура и технологии
- Компоненты системы
- Запуск проекта локально
- Backend: Python 3.13 + Django 6.0 + Django REST Framework 3.16.
- База данных: SQLite (для локального запуска), PostgreSQL(в производственной среде).
- Аутентификация клиента: JWT + OAuth2.
- Хранение файлов: локальный сервер (для изображений товаров).
- API‑документация: OpenAPI (Swagger/Redoc).
Содержит категории, подкатегории и товары. Категории: уникальность по названию, возможность загрузки изображения категории. Подкатегории: связь с категорией, уникальность по связанной категории и названию подкатегории, возможность загрузки изображения подкатегории. Товар: связь с подкатегорией, уникальность по связанной подкатегории и названию товара, возможность загрузки изображения товара. При обращении к товару, для которого загружено изображение, автоматически формируются и кэшируются для дальнейшего использования три эскиза изображения разных размеров. Эскизы формирует библиотека django-imagekit. Размеры эскизов указываются в константах SIZE_SMALL_IMAGE, SIZE_MEDIUM_IMAGE, SIZE_BIG_IMAGE в файле constants.py. SLUG генерируется автоматически.
Управление каталогом товаров выполняется из админ-панели сайта.
Просмотр каталога доступен по API любому пользователю, по эндпоинтам:
response:
{
"count": 123,
"next": "http://api.example.org/accounts/?page=4",
"previous": "http://api.example.org/accounts/?page=2",
"results": [
{
"id": 0,
"name": "string",
"slug": "string",
"image": "http://example.com",
"subcategories": [
{
"id": 0,
"name": "string",
"slug": "string",
"image": "http://example.com"
}
]
}
]
}
response
{
"id": 0,
"name": "string",
"slug": "string",
"image": "http://example.com",
"subcategories": [
{
"id": 0,
"name": "string",
"slug": "string",
"image": "http://example.com"
}
]
}
response
{
"count": 123,
"next": "http://api.example.org/accounts/?page=4",
"previous": "http://api.example.org/accounts/?page=2",
"results": [
{
"id": 0,
"name": "string",
"slug": "JKf5O2YLggiqhPbaa",
"category": "string",
"subcategory": "string",
"price": "string",
"images": [
{
"size": "string",
"url": "string"
}
]
}
]
}
response
{
"id": 0,
"name": "string",
"slug": "string",
"category": "string",
"subcategory": "string",
"price": "string",
"images": [
{
"size": "string",
"url": "string"
}
]
}
Доступ к корзине возможен только зарегистрированному пользователю по JWT токену. Пользователь после аутентификации получает доступ к своей корзине.
Из админ-панели сайта корзины пользователей доступны только администраторам для просмотра их содержимого.
Управление корзиной доступно через API по эндпоинтам:
request
{
"product": 2,
"count": 3
}
response
{
"id": 0,
"product": {
"id": 0,
"name": "string",
"slug": "string",
"category": "string",
"subcategory": "string",
"price": "string",
"images": [
{
"size": "string",
"url": "string"
}
]
},
"count": 0,
"total_price": 0
}
response
{
"cart": [
{
"id": 0,
"product": {
"id": 0,
"name": "string",
"slug": "string",
"category": "string",
"subcategory": "string",
"price": "string",
"images": [
{
"size": "string",
"url": "string"
}
]
},
"count": 0,
"total_price": 0
}
],
"total_in_cart": {
"total_quantity": 0,
"total_amount": 0
}
}
request
{
"count": 5
}
response
{
"id": 0,
"product": {
"id": 0,
"name": "string",
"slug": "string",
"category": "string",
"subcategory": "string",
"price": "string",
"images": [
{
"size": "string",
"url": "string"
}
]
},
"count": 0,
"total_price": 0
}
+---akatosphere_store каталог проекта
| | settings.py настройки проекта
| | urls.py головной urls проекта
| | ...
|
+---api приложение API
| | ...
|
+---cart приложение корзины
| | ...
|
+---catalog приложение каталога товаров
| | ...
|
+---fixtures
| full_no_image_db.json фикстуры для загрузки в БД
|
+---media
| +---CACHE
| | \---catalog
| | \---products кэшированные эскизы изображений товаров
| | ...
| |
| \---catalog
| +---categories оригиналы изображений категорий и подкатегорий
| | ...
| |
| |
| \---products оригиналы изображений товаров
| ...
|
+---tests тесты
| |...
|
+---users приложение users
| |...
|
| .env.example переменные окружения пример для файла .env
| constants.py константы проекта
| manage.py
| pytest.ini настройки тестов
| requirements.txt файл с зависимостями
| utils.py утилиты
|
Для документирования API используется библиотека drf-spectacular.
Ссылки на документацию:
/api/docs/ - в формате Swagger
/api/redoc/- в формате Redoc
/api/schema/ - ссылка для скачивания спецификации OpenApi
-
Клонируйте репозиторий и перейдите в папку проекта:
git clone https://github.com/kom-ae/akatosphere_store cd akatosphere_store -
Создайте и активируйте виртуальное окружение:
Для Linux/macOS:
python3 -m venv venv source venv/bin/activateДля Windows:
python -m venv venv source venv/Scripts/activate -
Обновите pip:
python -m pip install --upgrade pip -
Установите зависимости:
pip install -r requirements.txt -
Примените миграции:
python manage.py migrate -
Загрузите фикстуры:
python manage.py loaddata fixtures/full_no_image_db.json -
Создайте и укажите значения в файле
.env:cp .env.example .env -
Создайте суперпользователя:
python manage.py createsuperuser -
Запустите проект:
python manage.py runserver -
Запустите веб-браузер и введите в адресную строку:
http://127.0.0.1:8000/admin/- админ-панель проектаhttp://127.0.0.1:8000/api/docs/- API спецификация в формате Swaggerhttp://127.0.0.1:8000/api/redoc/- API спецификация в формате ReВocИспользуйте эндпоинты API указанные выше.
Прежде чем посылать запросы для управления корзиной, получите токен используя эндпоинт:
POST /api/v1/jwt/create/- получение JWT токенаrequest { "username": "string", "password": "string" } response { "access": "string", "refresh": "string" }
Автор проекта: Александр Комаров

