Проект Журнал Дежурства
- План поста: http://library.hazadus.ru/books/80/notes/#project-description-template
- Добавить скриншоты.
Коротко о проекте
В начале года в моём подразделении было запланировано расширение штата сменных сотрудников: с двух диспетчеров, работающих по графику "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 4 | Docs | В основе всего приложения лежит замечательный фреймворк Django. |
- Gunicorn | Docs | WSGI HTTP сервер для работы приложения Django. |
- whitenoise | Docs | Приложение Django для раздачи статических файлов. Преимущества его использования перед Nginx для раздачи статики описаны тут. |
- djangorestframework | Docs | Приложение Django для создания REST API, которое в проекте используется в основном Vue-фронтендом. |
- django-notifications-hq | PyPI | Лента активности пользователей для Django. |
- django-bleach | Docs | Очистка от HTML-тегов информации, вводимой на сайте пользователями, за исключением перечня допустимых тегов. |
- Daphne | GitHub | ASGI WebSocket сервер для работы Django Channels. |
- Django-Channels | Docs | Расширение Django для поддержки протокола WebSockets. Он используется в проекте для мгновенной передачи уведомлений о событиях с бэкенда на фронтэнд, для оперативного обновления интерфейса. |
- channels-redis | GitHub | Библиотека для использования Redis в качестве бекэнда для Django-Channels . |
SQLite | Docs | Данной БД вполне достаточно для работы проекта, поэтому она выбрана из-за простоты, удобства отладки и резервного копирования. |
Markdown | Docs | Библиотека для конвертирования разметки Markdown в задачах, комментариях и поручениях в HTML для корректного отображения в шаблонах страниц. |
XlsxWriter | Docs | Библиотека для генерации отчетов в формате Microsoft Excel. |
Redis | Docs | Используется как бэкенд для Django-Channels , Celery, а также как БД для хранения количества просмотров задач и документов. |
Celery | Docs | Система фоновой обработки задач. Используется для отправки уведомлений через Телеграм-бота. |
Nginx | Docs | Реверс-прокси для HTTP и WebSockets, а также раздача медиафайлов. |
Docker Compose | Docs | Контейнеризация сервисов, из которых состоит проект, для обеспечения их слаженной работы. |
Frontend
Библиотека / фреймворк | Ссылки | Описание |
---|---|---|
Bootstrap 5 | Docs | CSS фреймворк для упрощения верстки шаблонов страниц. |
Font Awesome | Docs | Значки для кнопок, пунктов меню и т.д. |
HTMX 1.8.4 | Docs | Замечательная библиотека для создания динамически обновляемых веб-страниц с минимум JavaScript. |
Vue 3 | Docs | Используется для создания удобного реактивного интерфейса для работы со списком задач и комментариями к ним. |
Axios | Docs | HTTP клиент. |
Marked.js | Docs | Для конвертирования разметки Markdown в HTML во фронтенде. |
DOMPurify | Docs | Очистка пользовательских данных во фронтенде от небезопасных тегов. |
Developer Tools
Инструмент | Назначение |
---|---|
Coverage.py | Инструмент для оценки полноты покрытия кода бэкенда тестами. Запускается командой make test . После выполнения команды, в директории ./htmlcov можно просмотреть подробнейший отчет. |
Interrogate | Интсрумент для проверки наличия docstrings в коде бэкенда. Запускается командой make coverage . |
Rollbar | Логирование ошибок при работе Django-бэкенда в продакшен. |
Sentry | Логирование ошибок при работе Vue-фронтенда. |
Чему научился / Выводы
- Использовал бы Tailwind для вёрстки.
- Не стал бы заморачиваться с Vue: высокая интерактивность не требуется.
Отправить сообщение
С помощью формы ниже, вы можете связаться с автором сайта. Пожалуйста, укажите ваш ник в Телеграме или e-mail, чтобы я смог вам ответить!