Интернет-магазин (учебный проект)
О проекте
Этот проект содержит только бэкенд интернет-магазина на 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/.- Все эндпоинты (GET, POST, PUT, PATCH, DELETE) можно тестировать прямо в браузере благодаря встроенному интерфейсу Django REST Framework.
- Для автоматизации или специфических сценариев удобно использовать Postman или
curl.
Создание суперпользователя для админки
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) | |--------------------------------|--------------------------------| |
|
|
| Управление изображениями товаров | |----------------------------------| |
|