Проект Журнал Дежурства

Коротко о проекте

В начале года в моём подразделении было запланировано расширение штата сменных сотрудников: с двух диспетчеров, работающих по графику "2 через 2" было решено перейти на 5 человек и круглосуточный график работы. Мне захотелось автоматизировать рутину, связанную с передачей информации от смены к смене, ведению отчетности по итогам дежурства и ознакомлением работников с различными заданиями и справочными материалами. Так возникла идея, которая была воплощена в проекте с простым названием "Журнал Дежурства".

Проект запущен в январе 2023 г., доведен до ума к концу февраля 2023 г., и с тех пор работает и используется ежедневно, не требуя дополнительного вмешательства.

Цели и задачи

Тут написать, какие проблемы должно было решать приложение.

Основные фичи проекта

  • Ознакомление работников с задачами, поручениями и документами с фиксацией времени ознакомления.
  • Для совместной работы над задачами сменными работниками, особенно когда они не встречаются лично для передачи дежурства.
  • Постановка, учёт выполнения задач.
  • Уведомления руководителю через Телеграм в реальном времени
  • Автоматическое сохранение отчета в Excel в конце смены
  • Пользователям очевидно, как работать с приложением, достаточно один раз объяснить общую концепцию.

Особенности

  • Контроль ознакомления пользователей с задачами и сообщениями о ходе их выполнения.
  • Поток уведомлений (activity stream) о действиях пользователей в разделе "Журнал".
  • Передача уведомлений для оперативного обновления фронтенда через WebSockets.
  • Уведомление админов о событиях через Телеграм-бота.
  • Разные варианты интерфейса, подходящие для разных ситуаций: классические server-side rendered Django-templates, удобные для работы с мобильных устройств или вывода на печать, и полноценное приложение на Vue 3 для динамичной работы с задачами и комментариями с десктопа.
  • Сохранение предыдущей версии задачи, комментария при их изменении.
  • Архив задач и комментариев (пользователи не могут их удалить бесследно).
  • Архив отчетов в формате Excel.
  • Личные задачи пользователей.
  • Быстрый поиск по задачам и комментариям к ним.
  • Поддержка Markdown в задачах, комментариях и поручениях.

Интересные решения

  • HTMX порадовал.
  • Интеграция раздела на Vue в многостраничное приложение.

Как всё устроено

Стек технологий, из каких контейнеров состоит. На какой конфигурации запущено.

Backend

Библиотека / фреймворкСсылкиОписание
Python 3.10СайтВесь бэкенд написан на Python.
Django 4DocsВ основе всего приложения лежит замечательный фреймворк Django.
- GunicornDocsWSGI HTTP сервер для работы приложения Django.
- whitenoiseDocsПриложение Django для раздачи статических файлов. Преимущества его использования перед Nginx для раздачи статики описаны тут.
- djangorestframeworkDocsПриложение Django для создания REST API, которое в проекте используется в основном Vue-фронтендом.
- django-notifications-hqPyPIЛента активности пользователей для Django.
- django-bleachDocsОчистка от HTML-тегов информации, вводимой на сайте пользователями, за исключением перечня допустимых тегов.
- DaphneGitHubASGI WebSocket сервер для работы Django Channels.
- Django-ChannelsDocsРасширение Django для поддержки протокола WebSockets. Он используется в проекте для мгновенной передачи уведомлений о событиях с бэкенда на фронтэнд, для оперативного обновления интерфейса.
- channels-redisGitHubБиблиотека для использования Redis в качестве бекэнда для Django-Channels.
SQLiteDocsДанной БД вполне достаточно для работы проекта, поэтому она выбрана из-за простоты, удобства отладки и резервного копирования.
MarkdownDocsБиблиотека для конвертирования разметки Markdown в задачах, комментариях и поручениях в HTML для корректного отображения в шаблонах страниц.
XlsxWriterDocsБиблиотека для генерации отчетов в формате Microsoft Excel.
RedisDocsИспользуется как бэкенд для Django-Channels, Celery, а также как БД для хранения количества просмотров задач и документов.
CeleryDocsСистема фоновой обработки задач. Используется для отправки уведомлений через Телеграм-бота.
NginxDocsРеверс-прокси для HTTP и WebSockets, а также раздача медиафайлов.
Docker ComposeDocsКонтейнеризация сервисов, из которых состоит проект, для обеспечения их слаженной работы.

Frontend

Библиотека / фреймворкСсылкиОписание
Bootstrap 5DocsCSS фреймворк для упрощения верстки шаблонов страниц.
Font AwesomeDocsЗначки для кнопок, пунктов меню и т.д.
HTMX 1.8.4DocsЗамечательная библиотека для создания динамически обновляемых веб-страниц с минимум JavaScript.
Vue 3DocsИспользуется для создания удобного реактивного интерфейса для работы со списком задач и комментариями к ним.
AxiosDocsHTTP клиент.
Marked.jsDocsДля конвертирования разметки Markdown в HTML во фронтенде.
DOMPurifyDocsОчистка пользовательских данных во фронтенде от небезопасных тегов.

Developer Tools

ИнструментНазначение
Coverage.pyИнструмент для оценки полноты покрытия кода бэкенда тестами. Запускается командой make test. После выполнения команды, в директории ./htmlcov можно просмотреть подробнейший отчет.
InterrogateИнтсрумент для проверки наличия docstrings в коде бэкенда. Запускается командой make coverage.
RollbarЛогирование ошибок при работе Django-бэкенда в продакшен.
SentryЛогирование ошибок при работе Vue-фронтенда.

Чему научился / Выводы

  • Использовал бы Tailwind для вёрстки.
  • Не стал бы заморачиваться с Vue: высокая интерактивность не требуется.

Отправить сообщение

С помощью формы ниже, вы можете связаться с автором сайта. Пожалуйста, укажите ваш ник в Телеграме или e-mail, чтобы я смог вам ответить!