Интернет-магазин (учебный проект)
О проекте
Этот проект содержит только бэкенд интернет-магазина на Django (модели, API, фикстуры, сериализаторы, админка). Фронтенд (Vue.js) не включён в репозиторий, так как был предоставлен как готовый артефакт и не является моей разработкой.
Ниже вы можете ознакомиться с картинками, как сайт выглядит вместе с фронтендом.
Запуск для локального просмотра api (без фронтенда)
Требования
- Python 3.12
- Установленные зависимости из
requirements.txt
Шаги
-
Клонируйте репозиторий (если ещё не сделали):
git clone <url-репозитория>
-
Перейдите в папку с проектом:
cd online-store/
-
Создайте и активируйте виртуальное окружение:
python -m venv venv
source venv/bin/activate # Linux/Mac
# или .\venv\Scripts\activate # Windows
-
Установите зависимости:
pip install -r requirements.txt
-
Перейдите в папку с приложением (где находится manage.py):
cd server/megano
-
Примените миграции:
python manage.py migrate
-
Загрузите фикстуры (тестовые данные):
python manage.py load_all_fixtures
-
Запустите сервер:
python manage.py runserver
## Доступные эндпоинты API
**API базовый URL:** `http://127.0.0.1:8000/api/`
**Админка:** `http://127.0.0.1:8000/admin/` (требуется суперпользователь)
> **Примечание по тестированию API:**
> - API не имеет корневого эндпоинта (`/api/` возвращает 404). Все запросы нужно направлять на конкретные пути, например [`/api/catalog/`](http://127.0.0.1:8000/api/catalog/).
> - Все эндпоинты (GET, POST, PUT, PATCH, DELETE) можно тестировать прямо в браузере благодаря встроенному интерфейсу Django REST Framework.
> - Для автоматизации или специфических сценариев удобно использовать [Postman](https://www.postman.com/) или `curl`.
### Создание суперпользователя для админки
```bash
python manage.py createsuperuser
Аутентификация (auth)
| Метод |
Эндпоинт |
Описание |
Требует авторизации |
| POST |
/sign-in |
Вход (логин). Тело: {"username": "...", "password": "..."} |
Нет |
| POST |
/sign-up |
Регистрация. Тело: {"name": "...", "username": "...", "password": "..."} |
Нет |
| POST |
/sign-out |
Выход (logout) |
Да |
Каталог (catalog)
| Метод |
Эндпоинт |
Описание |
Требует авторизации |
| GET |
/categories/ |
Список корневых категорий с вложенными подкатегориями |
Нет |
| GET |
/catalog/ |
Список товаров с фильтрацией и пагинацией. Параметры: filter[name], filter[minPrice], filter[maxPrice], filter[freeDelivery], filter[available], category, sort (rating/price/reviews/date), sortType (dec/inc), tags[] |
Нет |
| GET |
/products/popular |
Топ-8 популярных товаров |
Нет |
| GET |
/products/limited |
Товары с ограниченным тиражом (до 16) |
Нет |
| GET |
/sales |
Список товаров со скидкой (актуальные на сегодня) |
Нет |
| GET |
/banners/ |
Список товаров для баннера (4 товара) |
Нет |
Корзина (basket)
| Метод |
Эндпоинт |
Описание |
Требует авторизации |
| GET |
/basket |
Получить текущую корзину |
Нет (но привязана к сессии) |
| POST |
/basket |
Добавить товар в корзину. Тело: {"id": <product_id>, "count": <number>} |
Нет |
| DELETE |
/basket |
Удалить товар из корзины или уменьшить количество. Тело: {"id": <product_id>, "count": <number>} |
Нет |
Заказы (order)
| Метод |
Эндпоинт |
Описание |
Требует авторизации |
| GET |
/orders |
Список заказов текущего пользователя |
Да |
| POST |
/orders |
Создать заказ из корзины (тело: массив товаров с id и count) |
Нет (но привязано к сессии/пользователю) |
| GET |
/order/<int:pk> |
Детальная информация о заказе |
Да |
| POST |
/order/<int:pk> |
Подтвердить заказ (указать данные доставки и оплаты). Тело: full_name, email, phone, delivery_type, payment_type, city, address, total_cost, status |
Да |
Оплата (payment)
| Метод |
Эндпоинт |
Описание |
Требует авторизации |
| POST |
/payment/<int:pk> |
Оплатить заказ (меняет статус на paid) |
Да |
Профиль (profile)
| Метод |
Эндпоинт |
Описание |
Требует авторизации |
| GET |
/profile |
Получить профиль пользователя (имя, email, телефон, аватар) |
Да |
| POST |
/profile |
Обновить профиль. Тело: fullName, email, phone |
Да |
| POST |
/profile/password |
Сменить пароль. Тело: currentPassword, newPassword |
Да |
| POST |
/profile/avatar |
Загрузить аватар (multipart/form-data, поле avatar) |
Да |
Теги (tags)
| Метод |
Эндпоинт |
Описание |
Требует авторизации |
| GET |
/tags/ |
Список всех тегов |
Нет |
Товары (product)
| Метод |
Эндпоинт |
Описание |
Требует авторизации |
| GET |
/product/<int:pk>/ |
Детальная информация о товаре (включая отзывы, изображения, характеристики) |
Нет |
| POST |
/product/<int:pk>/reviews |
Добавить отзыв к товару. Тело: text, rate (1-5) |
Да |
Скриншоты
Пользовательская часть
Основные страницы
| Каталог товаров |
Пагинация |
 |
 |
| Детальная информация о товаре |
Корзина |
 |
 |
Оформление заказа (несколько шагов)
| Данные пользователя |
Способ доставки |
 |
 |
| Способ оплаты |
Подтверждение заказа |
 |
 |
Заказы и оплата
| Список заказов |
Оплата заказа |
 |
 |
Личный кабинет и отзывы
| Профиль пользователя |
Отзывы к товару |
 |
 |
Аутентификация
| Вход |
Регистрация |
 |
 |
Административная панель Django
| Главная страница админки |
Список товаров |
 |
 |
| Редактирование товара (часть 1) |
Редактирование товара (часть 2) |
 |
 |
| Управление изображениями товаров |
 |