Tipkor.ru

Ссылка гит Github

Ссылка сайт Сайт


Задача.

Сайт для небольшой типографии.

Cферы деятельности.

  • Офсетная полиграфия
  • Широкоформатная печать
  • Изготовление печатей и штампов

  • Функции.

  • Расчет стоимости продукции по каждому направлению.
  • Расчет сроков с учетом времени суток и выходных.
  • Клиент может отправить заказ.
  • Внесение клиентов, расчетов клиентов и заказов в базу данных.
  • Отправка писем (клиент, типография)
  • Контакты, карта, режим работы.
  • Мобильная версия (адаптивный дизайн)

  • Стек

  • Сервер VPS на Ubuntu
  • Сервер статики - Nginx.
  • Сервер приложения - Gunicorn.
  • Фреймворк - Django.
  • Python 3.8, pip
  • Шаблоны - html, css, Bootstrap 5.
  • База данных - PostgreSQL.



  • Структура приложений.


    app Orders

  • Модель клиента
  • Модель принятого заказа (Клиент один ко многим)
  • Валидатор на размер файла макета
  • Функция расчета времени готовности (по типу заказа)
  • Модуль отправки писем через smtplib



  • app Poly

  • Модель формата
  • Модель изделия (формат один ко многим)
  • Функция расчета цены
  • Метод сборки json для записи в Order
  • Некоторые choices - Константы (отдельный файл)


  • View организовано так: один метакласс от (TemplateView, FormMixin) и от него под каждый вид продукции наследуется класс со своей формой и шаблоном.
    Если запрос GET настроенная форма отображается в шаблоне, если пост - расчет и уже в шаблоне будет форма с параметрами запроса и расчет.
    Нажатием “Оформить заказ” отправляется GET с id расчета - переход на страницу подтверждения заказа и ввода данных клиента.
    Далее кнопка “Заказать” сохраняет клиента, если еще нет в базе, а заказ и доп информация сохраняется в Orders.
    Клиенту и исполнителю отправляется Email с данными заказа.
    Forms - ModelForm, с переопределёнными некоторыми полями.
    картинка - скрин 3х экранов и база







    app Wide

  • Связанные модели: материал, постобработка, расчет
  • Валидация по размерам (для формы)
  • Функция расчета цены
  • Метод сборки json для записи в Order
  • Метод проверки наличия расчета (если подходит берется из базы расчет)

  • По View and Forms - принцип то же что и выше.




    app Stamp

  • Связанные модели: 3 связанные модели для оснасток и 1 для расчета
  • Цена расчитывается в методе проверки наличия расчета.
  • Метод сборки json для записи в Order
  • Функция расчет сроков изготовления. Не в Order, так как готовность может быть срочная (внутри дня)

  • Forms как и выше, все примерно так же. View - расчет и подтверждение заказ (ввод контактов и отправка заказ) - объединены в один шаблон. картинка - объединенная страница и база




    Шаблоны.


    Сделаны на Bootstrap 5, css у каждого приложения свой.
    Есть базовый шаблон (шапка, меню подвал) внутри блок контент каждой страницы/приложения и блок контент для CEO.
    Адаптивность организована медиа запросами. Якоря в ссылках для прокрутки на мобильных.
    Страницы 404, 500 обрабатываются хэндлером с начального роутера urls.py в основном приложении.
    robot и sitemap - выдается статично.





    Деплой.


    Деплой на Django -> Wsgi -> Gunicorn -> Nginx -> IP/DNS
    Организован из директории сайта символьными ссылками через сокет.
    Сервер Gunicorn переменные окружения (для settings.py и почтового модуля) принимает из отдельного файла.
    SSL подписан ботом, есть перенаправление с http -> https.





    Планы.


  • Соединить с ботом Телеграмм (заказы, отправка, уведомление) возможно через DRF
  • Настроить логирование (loguru)
  • Уведомление о готовности клиента (через админ панель)
  • Подключение виджетов доставки/оплаты
  • Личный кабинет клиента