Внутренняя Django-система для учета материальных ценностей предприятия: карточек ТМЦ, закрепления за сотрудниками, передачи, возврата, инвентаризаций и интеграций с внешними системами.
- вести каталог ТМЦ с инвентарными и серийными номерами;
- закреплять оборудование за сотрудниками и возвращать его в резерв;
- оформлять передачу ТМЦ между сотрудниками;
- назначать периоды инвентаризации и сохранять фотофиксации сверки;
- хранить аудит ключевых действий;
- импортировать отделы, сотрудников и ТМЦ из 1С;
- поддерживать локальный вход и доменную аутентификацию через Active Directory.
Python 3.12Django 5.2PostgreSQL 16Docker ComposeWhiteNoiseдля раздачи статических файловdjango-environдля конфигурации через переменные окружения
Проект организован как modular monolith с доменными Django apps:
apps.accounts— пользователи, профиль, аутентификация, режим администратора.apps.org— отделы и оргсправочники.apps.inventory— карточки ТМЦ, сверки и назначения инвентаризации.apps.custody— выдача, возврат и передача ТМЦ.apps.audit— единый журнал событий.apps.integrations— 1С, Active Directory и технические журналы синхронизации.apps.dashboard— главная панель и агрегированная аналитика.apps.core— инфраструктурные модели, access guards, PDF и management-команды.
Внутри приложений проект в основном разделён на:
models.py— структура данных;selectors.py— чтение и агрегация данных для UI;services.py— изменения состояния и бизнес-операции;views/web.py— HTTP-слой;forms.py— формы и валидация пользовательского ввода.
.
├── .github/ # CI workflow
├── docker/ # entrypoint и gunicorn config
├── docs/ # проектная документация
├── requirements/ # зависимости Python
├── scripts/ # backup/restore базы
├── src/
│ ├── apps/ # доменные Django apps
│ ├── config/ # settings, urls, asgi/wsgi
│ ├── static/ # CSS, JS, изображения
│ └── templates/ # HTML шаблоны
├── compose.prod.yaml
├── Dockerfile
├── Makefile
└── manage.py
Во все основные каталоги проекта добавлены локальные README.md с описанием содержимого и механики работы.
cp .env.example .envМинимально важные переменные:
DJANGO_SETTINGS_MODULE=config.settings.prodDJANGO_SECRET_KEY=...DATABASE_URL=postgres://inventory:inventory@db:5432/inventoryDJANGO_ALLOWED_HOSTS=localhost,127.0.0.1
docker compose -f compose.prod.yaml up --build -dЧто произойдет:
- поднимется
dbнаPostgreSQL 16; - поднимется
webна Django + Gunicorn; - контейнер дождётся готовности базы;
- при старте автоматически выполнятся
migrateиcollectstatic.
docker compose -f compose.prod.yaml exec web python manage.py bootstrap_rolesdocker compose -f compose.prod.yaml exec web python manage.py createsuperuserhttp://localhost:8000
Базовые команды через Makefile:
make migrate
make makemigrations
make collectstatic
make createsuperuser
make bootstrap-roles
make check
make shell
make backup
make restore FILE=./var/backups/backup.sqlПримечания:
Makefileиспользуетpython3.- Для локального запуска вне Docker нужны установленные зависимости из
requirements/. - По умолчанию базовые settings читают
.envчерезdjango-environ.
CI описан в .github/workflows/ci.yml и выполняет:
- установку зависимостей;
python manage.py check;python manage.py migrate --noinput;python manage.py bootstrap_roles;python manage.py collectstatic --noinput;python manage.py makemigrations --check --dry-run.
Для CI используется:
DJANGO_SETTINGS_MODULE=config.settings.testSQLiteкак тестовая база
- экран настройки:
integrations/manage/ - ручной запуск синхронизации:
python manage.py sync_one_c_dataСинхронизируются:
- отделы;
- сотрудники;
- карточки ТМЦ.
- экран настройки:
integrations/manage/ - проверка подключения:
python manage.py test_active_directory_connectionПоддерживается:
- вход по локальному email/password;
- вход по доменному логину Active Directory;
- синхронизация профиля пользователя при логине, если это включено в настройках.
Резервное копирование:
make backupВосстановление:
make restore FILE=./var/backups/backup.sqlСкрипты используют pg_dump и psql, поэтому должны выполняться в окружении, где доступны PostgreSQL client tools и корректный DATABASE_URL.
Дополнительные материалы лежат в docs/:
database_architecture.md
- Это server-rendered Django-приложение, а не SPA.
- Статические файлы обслуживаются через
WhiteNoise. - Media-файлы пользователей и фотофиксаций сохраняются в
var/media. - Бизнес-история действий опирается на
apps.audit.