Основной функционал: 1. Регистрация и авторизация 2. Личный кабинет и карточка ЮЛ в админке 3. Корзина 4. Страничка ПАРТНЁРАМ 5. Ассортимент и цена
Скачайте код:
git clone https://github.com/JuliaKendo/CabinetOpt.git
Установите Python, если этого ещё не сделали.
Проверьте, что python
установлен и корректно настроен. Запустите его в командной строке:
python --version
Важно! Версия Python должна быть не ниже 3.9.
Возможно, вместо команды python
здесь и в остальных инструкциях этого README придётся использовать python3
. Зависит это от операционной системы и от того, установлен ли у вас Python другой версии.
В каталоге проекта создайте виртуальное окружение:
python -m venv venv
Активируйте его. На разных операционных системах это делается разными командами:
- Windows:
.\venv\Scripts\activate
- MacOS/Linux:
source venv/bin/activate
Перейдите в каталог проекта:
cd CabinetOpt
Для запуска сайта нужно запустить одновременно бэкенд и фронтенд, в двух терминалах.
Установите переменные окружения:
SECRET_KEY
- уникальный ключ проекта.
DEBUG
- установите 1 для разработки.
ALLOWED_HOSTS
- см Django docs.
CSRF_TRUSTED_ORIGINS
- устанавливает определенные адреса в качестве доверенных для запуска админ панели сайта (пр. "http://127.0.0.1:8000,")
LOG_LEVEL
- устанавливает желательный уровень логгирования сообщений:
DEBUG
: низкоуровневая системная информация для отладкиINFO
: Общая информация о системеWARNING
: Информация, описывающая возникшую незначительную проблему.ERROR
: Информация, описывающая возникшую серьезную проблему.CRITICAL
: информация, описывающая возникшую критическую проблему.
Общая схема логгирования следующая:
- в DEBUG режиме все сообщения журнала выводятся в консоль в соответствии с заданным уровнем логгирования, сообщения об ошибках дублируются в сервисе LogTail.
- в PROD режиме выводятся только сообщения об ошибках в сервисе LogTail, они же дублируются на электронную почту администратора.
LOGTAIL_SOURCE_TOKEN
- токен сервиса LogTail, который используется в качестве внешнего инструмента сбора логов.
Установите зависимости в виртуальное окружение:
pip install -r requirements.txt
Создайте файл базы данных SQLite и отмигрируйте её следующей командой:
python manage.py migrate
Запустите сервер:
python manage.py runserver
Откройте новый терминал. Для работы сайта в dev-режиме необходима одновременная работа сразу двух программ runserver
и webpack
в режиме watch. Каждая требует себе отдельного терминала. Чтобы не выключать runserver
откройте для фронтенда новый терминал и все нижеследующие инструкции выполняйте там.
Установите node, если у вас его ещё нет.
Проверьте, что node и его пакетный менеджер корректно установлены. Если всё исправно, то терминал выведет их версии:
node --version
# v12.18.2
npm --version
# 6.14.5
Версия node
должна быть не младше 10.0. Версия npm
не важна.
Установите необходимые пакеты. В каталоге проекта запустите:
npm i
Проверьте, что webpack
(это упаковщик веб-приложений) установлен и его версию в командной строке:
npm ls
Нужна именно версия webpack не ниже 5. Установите Webpack, если он еще не установлен на предыдущих шагах.:
npm i webpack webpack-cli
Почти всё готово. Теперь запустите сборку фронтенда и не выключайте. Webpack будет работать в фоне и следить за изменениями в JS-коде:
npm run start
Для stage и prod версии достаточно только собрать статику. Поэтому запустите:
npm run build
Дождитесь завершения сборки. Это вполне может занять 10 и более секунд. О готовности вы узнаете по сообщению в консоли:
webpack 5.88.2 compiled successfully in 3926 ms
Webpack будет следить за файлами в каталоге src
. Он пробежиться по всем файлам и создаст полный список зависимостей в соответствии с настройками в webpack.config.js. Дальше он соберёт все файлы в большой бандл static/main.js
. Он полностью самодостаточен и потому пригоден для запуска в браузере. Именно этот бандл сервер отправит клиенту.
Теперь все, статика для сайта собрана.
Сбросьте кэш браузера Ctrl-F5. Браузер при любой возможности старается кэшировать файлы статики: CSS, картинки и js-код. Порой это приводит к странному поведению сайта, когда код уже давно изменился, но браузер этого не замечает и продолжает использовать старую закэшированную версию. В норме Parcel решает эту проблему самостоятельно. Он следит за пересборкой фронтенда и предупреждает JS-код в браузере о необходимости подтянуть свежий код. Но если вдруг что-то у вас идёт не так, то начните ремонт со сброса браузерного кэша, жмите Ctrl-F5.
Установите Docker и docker compose следуя инструкциям в документации Docker
Установите переменные окружения:
SECRET_KEY
- уникальный ключ проекта.
DEBUG
- установите 1 для разработки.
ALLOWED_HOSTS
- см Django docs.
CSRF_TRUSTED_ORIGINS
- устанавливает определенные адреса в качестве доверенных для запуска админ панели сайта (пр. "http://127.0.0.1:8000,")
DATABASE
- имя, используемое в sh скрипте для определения типа базы данных (пр. postgres)
DB_ENGINE
- имя, указывает на используемый движок для доступа к БД. (пр. "django.db.backends.postgresql")
DB_NAME
- имя базы данных
DB_USER
- имя пользователя для доступа к базе данных
DB_PASSWORD
- пароль пользователя для доступа к базе данных
DB_HOST
- имя или ip адрес хоста на котором располагается база данных (в случае развертывания в docker тут пишем имя соответствующего сервиса из docker-compose)
DB_PORT
- порт на котором развернута база данных на хосте
DB_EMAIL
- адрес электронной почты пользователя, будет использоваться для автоматического создания супер-пользователя django
LOG_LEVEL
- устанавливает желательный уровень логгирования сообщений
LOGTAIL_SOURCE_TOKEN
- токен сервиса LogTail, который используется в качестве внешнего инструмента сбора логов.
Запустите развертывание сайта в Docker:
docker-compose up -d --build
Установите Docker и docker compose следуя инструкциям в документации Docker
Установите переменные окружения:
SECRET_KEY
- уникальный ключ проекта.
DEBUG
- установите 0.
ALLOWED_HOSTS
- см Django docs.
CSRF_TRUSTED_ORIGINS
- устанавливает определенные адреса в качестве доверенных для запуска админ панели сайта (пр. "http://127.0.0.1:8000,")
DATABASE
- имя, используемое в sh скрипте для определения типа базы данных (пр. postgres)
DB_ENGINE
- имя, указывает на используемый движок для доступа к БД. (пр. "django.db.backends.postgresql")
DB_NAME
- имя базы данных
DB_USER
- имя пользователя для доступа к базе данных
DB_PASSWORD
- пароль пользователя для доступа к базе данных
DB_HOST
- имя или ip адрес хоста на котором располагается база данных (в случае развертывания в docker тут пишем имя соответствующего сервиса из docker-compose)
DB_PORT
- порт на котором развернута база данных на хосте
LOG_LEVEL
- устанавливает желательный уровень логгирования сообщений
LOGTAIL_SOURCE_TOKEN
- токен сервиса LogTail, который используется в качестве внешнего инструмента сбора логов.
Запустите развертывание сайта в Docker:
docker-compose -f docker-compose.prod.yml up -d --build
Выполните миргации:
docker-compose -f docker-compose.prod.yml exec web python manage.py migrate --noinput
Выполните создание супер-пользователя:
docker-compose -f docker-compose.prod.yml exec web python manage.py createsuperuser
Выполните сбор статики:
docker-compose -f docker-compose.prod.yml exec web python manage.py collectstatic --no-input --clear
Выполните получение токена для пользователя (пр. admin):
python manage.py drf_create_token admin
Так же токен можно получить по имени пользователя и паролю, достаточно выполнить следующий запрос к сайту:
curl -X POST -H "Content-Type: application/json" -d '{"username":"username","password":"password"}' http://127.0.0.1:8000/users/api-token-auth/
Выполните загрузку номенклатуры из json файла:
curl -X POST -H "Content-Type: application/json" -d @media/test.json http://127.0.0.1:8000/catalog/upload/products -H "Authorization: Token 0000000000000000000000000000000000000000"
формат json файла следующий:
[
{
"nomenclature": {
"Идентификатор": "79291f1d-6661-11e0-9aef-0c6076a3656e",
"ИмяТипа": "Справочник.Номенклатура",
"Наименование": "20-00-0000-11143 Кольцо 585",
"Удален": false
},
"articul": "10-10-0000-00000",
"brand": "",
"collection": {
"Идентификатор": "0d032422-5bc4-11eb-ab63-005056bb1ac7",
"ИмяТипа": "Справочник.ТипыИзделий",
"Наименование": "Кольцо",
"Удален": false
},
"unit": "163",
"product_type": "product",
"metal": "metal",
"metal_content": "metal_content",
"color": "color",
"gender": "gender",
"status": "status",
"gem_sets": [{
"precious_stone": {
"Идентификатор": "0d032422-5bc4-11eb-ab63-005056bb1ac7",
"ИмяТипа": "Справочник.ТипыКамней",
"Наименование": "Бриллиант",
"Удален": false
},
"cut_type": {
"Идентификатор": "0d032422-5bc4-11eb-ab63-005056bb1ac7",
"ИмяТипа": "Справочник.Огранки",
"Наименование": "кр57",
"Удален": false
},
"color": "color",
"weight": 1.26,
"quantity": 11,
"order": 0,
"comment": "",
"description": ""
}, ...]
},...
]
Выполните загрузку картинок из json файла:
curl -X POST -H "Content-Type: application/json" -d @media/imgs.json http://127.0.0.1:8000/catalog/upload/images -H "Authorization: Token 0000000000000000000000000000000000000000"
формат json файла следующий:
[
{
"nomenclature": {
"Идентификатор": "6763b1f1-24e5-11eb-ab49-005056bb02df",
"ИмяТипа": "Справочник.Номенклатура",
"Наименование": "12-20-0001-23563 Серьги пуссеты 585жз ",
"Удален": false
},
"filename": "8adf671b-345b-11ea-ab42-005056bb02df.jpg",
"image": "/9j/4AAQSkZJRgABAgEBLAEsAAD/4QuARXhpZgAASUkqAAgAAAAQAAABAwABAAAA\r\n/wUAAAEBAwABAAAA/...
},...
]
Выполните загрузку цен из json файла:
curl -X POST -H "Content-Type: application/json" -d @media/price.json http://127.0.0.1:8000/catalog/upload/price -H "Authorization: Token 0000000000000000000000000000000000000000"
формат json файла следующий:
[
{
"client": {
"Идентификатор": "7198167b-a3c8-11ed-ab73-005056bb60df",
"ИмяТипа": "Справочник.Контрагенты",
"Наименование": "ГОЛДЕН ПЛЮС ООО",
"Удален": false,
"ИНН": "3666265421"
},
"nomenclature": {
"Идентификатор": "50518117-da35-11e9-ab41-005056bb02df",
"ИмяТипа": "Справочник.Номенклатура",
"Наименование": "П1 030 Цепь 925Ag",
"Удален": false
},
"size": "45.0",
"price": 205.5,
"unit": "796"
}, ...
]
Выполните загрузку весов, размеров и остатков номенклатуры из json файла:
curl -X POST -H "Content-Type: application/json" -d @media/stock_and_costs.json http://127.0.0.1:8000/catalog/upload/stock_and_costs -H "Authorization: Token 0000000000000000000000000000000000000000"
формат json файла следующий:
[
{
"nomenclature": {
"Идентификатор": "79291f1d-6661-11e0-9aef-0c6076a3656e",
"ИмяТипа": "Справочник.Номенклатура",
"Наименование": "20-00-0000-11143 Кольцо 585",
"Удален": false
},
"size": 0,
"weight": 1.26,
"stock": 0,
"price_per_gr": 0
},
]
Откройте сайт в браузере по адресу http://127.0.0.1:8000/. Если вы увидели пустую белую страницу, то не пугайтесь, выдохните и вернитесь к сборки фронтенда.