"Exam" - это веб-приложение для создания и проведения онлайн-тестирований, разработанное на Django. Система предназначена для образовательных учреждений и других организаций, где требуется контролировать процесс прохождения тестов.
Ключевые особенности:
- Прокторинг: Отслеживание переключений вкладок и времени, проведенного вне страницы с тестом.
- Гибкая настройка тестов: Различные типы вопросов, включая семантическую оценку текстовых ответов.
- Управление пользователями: Интеграция с группами Django для разграничения доступа к тестам.
- Автоматическая и ручная оценка: Возможность автоматического подсчета баллов и их ручной корректировки.
Проект использует Docker для контейнеризации и состоит из следующих сервисов:
- web: Django-приложение.
- db: База данных PostgreSQL.
- nginx: Веб-сервер и обратный прокси.
- tailwind: Сервис для сборки CSS и обфускации JS.
Система отслеживает следующие действия пользователя во время прохождения теста:
- Переключение вкладок: Каждое переключение на другую вкладку или приложение фиксируется.
- Время вне страницы: Система подсчитывает общее время, которое пользователь провел вне страницы с тестом.
- Предупреждения: При превышении лимита нарушений, тест может быть автоматически завершен.
Эти функции реализованы с помощью JavaScript на стороне клиента (ui/static_src/js/test-page.js) и обрабатываются на стороне сервера в UserTestSession.
Для защиты от анализа и модификации, клиентский JavaScript-код (ui/static_src/js/test-page.js) подвергается обфускации в процессе сборки Docker-контейнера. Обфускация выполняется с помощью javascript-obfuscator согласно конфигурации в ui/static_src/obfuscator.config.json и запускается командой npm run build в ui/static_src/package.json.
Система поддерживает следующие типы вопросов:
- Один верный ответ: Радио-кнопки.
- Несколько верных ответов: Чекбоксы.
- Короткий текстовый ответ: Однострочное текстовое поле с семантической оценкой.
- Развёрнутый ответ: Многострочное текстовое поле с семантической оценкой.
- Числовой ответ: Поле для ввода числа с возможностью указания допуска.
- Упорядочивание: Сортировка элементов в правильном порядке.
- Баллы: Каждому вопросу можно присвоить определенное количество баллов.
- Семантическая оценка: Для развернутых текстовых ответов используется модель для семантического сравнения ответа пользователя с эталонными ответами.
- Оценки: Система позволяет настраивать шкалу оценок (например, "отлично", "хорошо" и т.д.) в зависимости от набранных процентов.
-
Склонируйте репозиторий:
git clone https://github.com/antonchuvashow/exam cd exam -
Создайте и настройте
.envфайл: Скопируйтеenv.exampleв.envи заполните необходимые переменные окружения (секретные ключи, настройки базы данных и т.д.). -
Запустите проект с помощью Docker Compose:
docker-compose up --build
-
Создайте суперпользователя:
docker-compose exec web python manage.py createsuperuser -
Откройте админ-панель в браузере по адресу
{SITE_URL}/{ADMIN_URL}.