Git Product home page Git Product logo

cabinetopt's Introduction

Личный кабинет для опта на сайте talantgold.ru

Основной функционал: 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

Как развернуть dev-версию сайта

Для запуска сайта нужно запустить одновременно бэкенд и фронтенд, в двух терминалах.

Как собрать бэкенд

Установите переменные окружения:

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.

Как развернуть stage-версию сайта

Установите 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

Как развернуть prod-версию сайта

Установите 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

Как получить токен пользователя и выполнить обмен с 1С

Выполните получение токена для пользователя (пр. 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/. Если вы увидели пустую белую страницу, то не пугайтесь, выдохните и вернитесь к сборки фронтенда.

cabinetopt's People

Contributors

juliakendo avatar

Watchers

 avatar

Forkers

ui-trade d-flime

cabinetopt's Issues

remove blue border of clicked button css

priority:

degree of influence:

damage:

description:

apply next styles, but it's not work

.btn-send-order, .btn-sign-in {
    width: 213px;
    height: 38px;
    flex-shrink: 0;
    border-radius: 5px;
    background: #E3A358;
    border-color: #E3A358;
}

.btn-send-order:hover, .btn-sign-in:hover {
    background: #242A35;
    border-color: #242A35;
}

.btn-send-order:active, .btn-sign-in:active {
    background: #242A35!important;
    border-color: #242A35!important;
    outline: none!important;
}

.btn-send-order:focus, .btn-sign-in:focus {
    outline: none!important;
}

.btn-send-order::-moz-focus-inner,
.btn-sign-in::-moz-focus-inner {
    border: 0!important;
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.