Skip to content

arshinov-dev/PressKit

Repository files navigation

📦 PressKit

Status License Version Python Flask HTML CSS JS Markdown

Система учёта и контроля оборудования для пресс-центра ИТТСУ.

📑 Оглавление (нажмите, чтобы раскрыть)

О проекте

Проект создан в рамках реальной "боевой" задачи для пресс-центра ИТТСУ.

Проблема

Ранее учёт велся в бумажном журнале.

Сотруднику пресс-центра приходилось вручную записывать:

  • номер оборудования
  • ФИО
  • время выдачи и возврата.

Это занимало до 2 минут на единицу техники.

Решение

Теперь достаточно отсканировать QR-код на оборудовании камерой телефона, выбрать себя из списка, ввести PIN-код и дату возврата.

Результат

Процедура занимает не более 15 секунд. Экономия времени — в 5 раз.


Структура проекта

presskit/
├── backups/                       # Автоматические бэкапы БД
├── static/
│   ├── css/
│   │   └── style.css              # Стили интерфейса
│   ├── js/
│   │   └── admin.js               # JavaScript для админки
│   └── qr_codes/                  # Сгенерированные QR-коды (SVG)
├── templates/
│   ├── admin/
│   │   ├── dashboard.html         # Главная админ-панель
│   │   ├── login.html             # Страница входа админа
│   │   └── scan.html              # Страница сканирования (админ)
│   └── user/
│       ├── pack.html              # Страница пака оборудования
│       └── scan.html              # Страница сканирования оборудования
├── .gitignore                     # Игнорируемые файлы Git
├── app.py                         # Основное приложение Flask
├── auth.py                        # Авторизация администраторов
├── backup.py                      # Автоматические бэкапы
├── CHANGELOG.md                   # История изменений
├── LICENSE.md                     # Лицензия
├── README.md                      # О проекте
├── config.py                      # Конфигурация приложения
├── database.py                    # Инициализация и миграции БД
├── login&password.txt             # Учётные данные (для первого входа)
├── models.py                      # Модели базы данных
├── qr_generator.py                # Генерация QR-кодов
└── requirements.txt               # Зависимости Python

Установка

Локальный запуск

Клонировать репозиторий

git clone https://github.com/arushinofu/presskit.git
cd presskit

Создать виртуальное окружение

python3 -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

Установить зависимости

pip install -r requirements.txt

Запустить приложение

python3 app.py

После запуска:

Админка: http://localhost:5000/admin
Логин: admin
Пароль: PressKit2026! (смените после первого входа!)

⚠️ Важно: Смените SECRET_KEY и пароль администратора после развёртывания!


Конфигурация

Основные настройки в config.py:

PORT = 5000                 # Порт сервера
HOST = '0.0.0.0'            # Слушать все интерфейсы
DEBUG = False               # Режим отладки
BACKUP_INTERVAL_HOURS = 24  # Интервал бэкапов
SECRET_KEY = '...'          # Ключ сессий (смените в продакшене!)
QR_BRAND_TEXT = '...'       # Брендовая подпись QR-кодов

Административная панель

Вкладка Функции
Пользователи Добавление, редактирование, импорт/экспорт CSV
Гости Просмотр активных гостей с оборудованием
Оборудование Управление инвентарём, генерация QR
Паки Создание наборов оборудования
Логи История всех операций с фильтрацией и экспортом

Безопасность

Мера Описание
Хэширование паролей Werkzeug + bcrypt
PIN-коды 4 цифры для пользователей
Защита сессий HttpOnly, SameSite=Lax, 30 дней
Валидация дат Запрет прошедшего времени
Нормализация телефонов Единый формат 7 (XXX) XXX-XX-XX

Возможности

Функция Описание
📱 QR-сканирование Выдача/возврат через сканирование QR-кода (SVG)
👤 Пользователи Учёт с PIN-кодом (4 цифры) для авторизации
🎫 Гости Временный доступ без регистрации (ФИО + телефон + Telegram)
📦 Паки Групповая выдача нескольких единиц оборудования
Дедлайны Обязательная дата возврата с серверной валидацией
🔔 Напоминания Фоновая проверка просрочек (APScheduler)
📊 Логи Полная история операций (экспорт в CSV)
💾 Бэкапы Автоматическое резервное копирование БД (24ч)
📥 Импорт/Экспорт Массовая загрузка данных через CSV

Технологии

Компонент Версия Назначение
Python 3.9+ Язык программирования
Flask 2.3.3 Веб-фреймворк
Flask-Login 0.6.3 Авторизация администраторов
Flask-SQLAlchemy 3.1.1 ORM для базы данных
SQLite Встроенная БД
APScheduler 3.11.2 Планировщик задач
qrcode 8.2 Генерация QR-кодов (SVG)
Werkzeug 2.3.7 Хэширование паролей
bcrypt 5.0.0 Дополнительная защита
Pillow 11.3.0 Работа с изображениями
openpyxl 3.1.5 Работа с таблицами

Основные сценарии использования

1. Выдача оборудования

  1. Отсканировать QR-код на оборудовании
  2. Выбрать: Пользователь (с PIN) или Гость (без PIN)
  3. Указать дату возврата (обязательно, формат: ДД.ММ.ГГ ЧЧ:ММ)
  4. Нажать «Взять»

2. Возврат оборудования

  1. Отсканировать QR-код, взятого оборудования
  2. Выбрать себя из списка
  3. Ввести PIN-код (для пользователей)
  4. Нажать «Вернуть»

3. Работа с паками

  • Выдача/возврат нескольких единиц одним сканированием
  • Автоматическое определение владельца пака
  • Запрет на частичный возврат (только целиком)

4. Гости

  • Быстрая выдача без регистрации
  • Контакты: ФИО, телефон (маска 7 (XXX) XXX-XX-XX), Telegram
  • Авто-удаление после возврата всего оборудования

Версионирование

Проект использует Семантического версионирования:

Версия Описание
MAJOR (X.0.0) Глобальные изменения, ломает совместимость
MINOR (1.X.0) Новые функции без ломки старой логики
PATCH (1.0.X) Исправления ошибок и мелкие правки

📋История изменений


Лицензия

Данный проект лицензирован под MIT License.

Это означает, что вы можете свободно использовать, изменять и распространять код.

При условии сохранения уведомления об авторских правах.


Контакты

Автор Никнейм
Arshinov Maxim @arushinofu

Другие проекты для пресс-центра: https://github.com/topics/press-ittsu


Логотип

© arushinofu 2026

⬆️ Наверх

PressKit — потому что оборудование должно возвращаться! 📦