Quiz System — это высокопроизводительный, стабильный и современный веб-сервис для создания и проведения интерактивных квизов и викторин в реальном времени с поддержкой WebSockets (аналог Kahoot! / Quizizz).
- 🔐 Регистрация и авторизация: Защищенный вход и безопасное хэширование паролей (
Werkzeug). - 🛠 Конструктор викторин:
- Указание названия, описания, базового таймера и выбор категории (ИТ и Технологии, Наука, История, Развлечения, Спорт, Искусство, Общее).
- Настройка статусов викторины (Draft / Ready / Archived).
- ❓ Гибкий конструктор вопросов:
- Типы вопросов: одиночный выбор (
single_choice) и множественный выбор (multiple_choice). - Прикрепление изображений к вопросам.
- Персональные тайм-лимиты и баллы за каждый вопрос.
- Типы вопросов: одиночный выбор (
- 🎮 Управление игрой:
- Создание комнаты с уникальным 6-значным PIN-кодом.
- Синхронный старт, переключение вопросов в реальном времени и отображение глобального лидерборда.
- 🚀 Быстрое подключение: Вход в комнату по PIN-коду и никнейму без сложной регистрации.
- ⏱ Демонстрация вопросов в реальном времени: Вопрос доступен для ответа строго во время его показа.
- 📊 Умный подсчет баллов: Учитывается точность ответа и скорость мышления в миллисекундах (
response_time_ms). - 🏆 Личный кабинет: Полная история игр и набранных баллов в профиле.
| Компонент | Технология | Назначение |
|---|---|---|
| Backend | Python 3.12, Flask | Серверная веб-логика и REST API |
| Real-time | Flask-SocketIO (WebSocket) | Двусторонняя мгновенная синхронизация сокетов |
| Database | SQLite, SQLAlchemy 2.0 (ORM) | Хранение данных, каскадные связи и ORM |
| Frontend | HTML5, CSS3, Vanilla JS | Адаптивный веб-интерфейс в тёмных тонах |
| Testing | Pytest / Unittest | Покрытие авто-тестами авторизации, CRUD и игровой логики |
Приложение спроектировано по принципам Clean Architecture с разделением ответственности:
quiz-system/
├── app/
│ ├── __init__.py # Инициализация Flask приложения
│ ├── database.py # Настройка SQLAlchemy и контекстный менеджер get_db()
│ ├── models.py # ORM Модели (User, Quiz, Question, GameRoom, Participant, etc.)
│ ├── services.py # Сервисный слой (AuthService, QuizService, GameService)
│ ├── socket_events.py # WebSocket события для реального времени
│ ├── routes.py # Аутентификация и личный кабинет
│ ├── quiz_routes.py # API управления квизами
│ ├── game_routes.py # API игровых комнат и ответов
│ ├── static/ # CSS стили и JavaScript клиенты
│ └── templates/ # HTML шаблоны (Jinja2)
├── docs/ # Пояснительная записка и графические материалы
├── tests/ # Пакет автоматизированных тестов
├── config.py # Конфигурация приложения
└── run.py # Точка запуска WebSocket сервера
- Python 3.10+
- Git
# Запуск веб-сервера
py -3.12 run.pyПриложение будет доступно по адресу: http://127.0.0.1:5000
py -3.12 -m unittest discover -s testsФайл пояснительной записки для сдачи на платформу доступен в docs/EXPLANATORY_NOTE.md.