Интерактивная 2D-карта офиса на Django с конструктором планировки для администратора.
Комнаты отображаются на Canvas (Fabric.js) как полупрозрачные прямоугольники с названиями. Внешний контур здания статичен, внутренняя планировка полностью управляется из базы данных.
- Режим просмотра — все комнаты отображаются с цветовой индикацией, при наведении — подсветка, при клике — информация о комнате.
- Режим редактирования (staff only) — перетаскивание (drag) и изменение размера (resize) комнат на холсте. Изменения сохраняются в БД через AJAX.
- API — JSON-эндпоинт с данными комнат и эндпоинт для обновления координат.
- Аутентификация — кнопка «Войти» для анонимных пользователей, панель управления для администрации, кнопка «Выйти» для остальных.
LAN-Device-map/
├── ldm/ # Настройки Django проекта
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py, asgi.py
├── map/ # Приложение карты
│ ├── migrations/ # Миграции БД (включая seed-данные)
│ ├── templates/map/
│ │ └── index.html # Главная страница с Canvas и Fabric.js
│ ├── admin.py
│ ├── models.py # Модели базы данных (Комнаты)
│ ├── tests.py # Тесты модели, представления и API
│ ├── urls.py # Маршруты: /, /api/rooms/, /api/rooms/save/
│ └── views.py # Home page, rooms API, save_rooms (staff-only)
├── pages/ # Запасное приложение для будущих профилей устройств
├── manage.py
├── requirements.txt
├── .env.example
└── README.md
git clone https://github.com/Zhidkov-Nikita/LAN-Device-map.git
cd LAN-Device-mappython -m venv venv
venv\Scripts\activatepip install -r requirements.txtСкопируйте .env.example в .env и отредактируйте параметры подключения:
DB_NAME=landevicemap
DB_USER=postgres
DB_PASSWORD=postgres
DB_HOST=localhost
DB_PORT=5432
SECRET_KEY=django-insecure-your-secret-key-here
Убедитесь, что PostgreSQL запущен и база данных landevicemap существует.
Создает таблицы в базе данных с базовыми значениями
python manage.py migrateМиграция 0002_addrooms создает администратора автоматически
login: admin
password: adminНастоятельно рекомендуется сразу поменять пароль в панели администратора
Локальный хост для просмотра локально
python manage.py runserverОткройте http://localhost:8000/ в браузере.
http://localhost:8000/admin админ панель.
python manage.py test mapБудут выполнены:
- RoomModelTest — создание, значения по умолчанию,
__str__, уникальностьcode, сортировка. - HomePageTest — статус 200, наличие комнат и
rooms_jsonв контексте. - SaveRoomsAPITest — успешное сохранение админом, 403 для анонима и обычного пользователя, массовое обновление, обработка невалидного JSON.
- На холсте отображается внешний контур здания и блоки комнат, загруженные из БД.
- При наведении — подсветка (повышение непрозрачности заливки).
- При клике — панель с названием и кодом комнаты.
- Перетаскивание и изменение размера отключены.
- Кнопка «Редактировать» переключает режим.
- Комнаты становятся жёлтыми, появляются угловые маркеры для изменения размера.
- Администратор может свободно двигать комнаты и менять их размер.
- При изменении размера название автоматически центрируется.
- Кнопка «Сохранить» отправляет POST-запрос на
/api/rooms/save/с JSON-массивом{id, x, y, width, height}для всех комнат. - После сохранения режим редактирования автоматически выключается.
| Метод | Путь | Описание | Доступ |
|---|---|---|---|
| GET | / |
Главная страница с картой | Все |
| GET | /api/rooms/ |
JSON-список комнат | Все |
| POST | /api/rooms/save/ |
Сохранение координат комнат | Только администрация |
Ответ GET-запроса /api/rooms/:
[
{
"id": 1,
"name": "Архив",
"code": "ARCH-01",
"x": 750,
"y": 31,
"width": 220,
"height": 289
}
]