Skip to content

tunaeng/LAN-Device-map

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LAN Device Map

Интерактивная 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

Быстрый запуск

1. Клонирование

git clone https://github.com/Zhidkov-Nikita/LAN-Device-map.git
cd LAN-Device-map

2. Виртуальное окружение

python -m venv venv
venv\Scripts\activate

3. Зависимости

pip install -r requirements.txt

4. База данных (PostgreSQL)

Скопируйте .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 существует.

5. Миграции

Создает таблицы в базе данных с базовыми значениями

python manage.py migrate

6. Создание администратора

Миграция 0002_addrooms создает администратора автоматически

login: admin
password: admin

Настоятельно рекомендуется сразу поменять пароль в панели администратора

7. Запуск

Локальный хост для просмотра локально

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.

Режимы работы

Просмотр

  • На холсте отображается внешний контур здания и блоки комнат, загруженные из БД.
  • При наведении — подсветка (повышение непрозрачности заливки).
  • При клике — панель с названием и кодом комнаты.
  • Перетаскивание и изменение размера отключены.

Редактирование (staff only)

  • Кнопка «Редактировать» переключает режим.
  • Комнаты становятся жёлтыми, появляются угловые маркеры для изменения размера.
  • Администратор может свободно двигать комнаты и менять их размер.
  • При изменении размера название автоматически центрируется.
  • Кнопка «Сохранить» отправляет POST-запрос на /api/rooms/save/ с JSON-массивом {id, x, y, width, height} для всех комнат.
  • После сохранения режим редактирования автоматически выключается.

API

Метод Путь Описание Доступ
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
  }
]

About

Интерактивная 2D-карта офиса на Django и Fabric.js с базой данных на PostgreSQL

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Contributors