![Страница авторизации Страница авторизации](https://habrastorage.org/getpro/habr/upload_files/d9e/88f/515/d9e88f5151c0aaed4b6542ead045f487.png)
Введение
Привет всем! Сегодня я расскажу вам о моей системе оценивания, которая создана для проведения экзаменов и оценки знаний студентов. Система построена на Django Rest Framework (DRF) для бэкенда и React с MaterialUI для фронтенда. Я добавил множество полезных функций, включая интеграцию с ISPmanager, которые делают систему удобной и эффективной.
Пару слов с чего начиналось всё
Всё началось с Демонстрационного экзамена – это форма итоговой аттестации, направленная на проверку практических знаний и умений студентов в реальных условиях. Он используется для оценки способности студентов применять теоретические знания на практике и справляться с профессиональными задачами. Такой экзамен особенно важен в профессиональном и техническом образовании, где практические навыки играют ключевую роль.
Пример оценки работ на Демонстрационном экзамене
Оценка работ на ДЭ проводится по нескольким критериям, которые могут включать:
1. Точность выполнения задания
2. Качество выполнения
4. Креативность и инновационность
5. Уровень профессиональных навыков
Пример задания: Создание функционального веб-сайта для онлайн-магазина.
Ниже приведён пример
-
Функциональность (50 баллов)
Сайт должен содержать главную страницу, страницу товаров, корзину и форму обратной связи.
Вся навигация должна быть рабочей, без ошибок.
-
Дизайн и пользовательский интерфейс (30 баллов)
Сайт должен быть визуально привлекательным и удобным для пользователей.
Использование HTML5 & CSS и JavaScript для улучшения интерфейса.
-
Код и структура (20 баллов)
Код должен быть чистым, хорошо структурированным и прокомментированным.
Использование современных технологий и фреймворков, таких как jQuery и Laravel/Yii2/Django.
Пример оценки работы студента
Функциональность: Студент создал все необходимые страницы, но форма обратной связи не работает (30/50 баллов).
Дизайн и пользовательский интерфейс: Сайт выглядит профессионально и удобно, но есть мелкие недочеты в верстке (25/30 баллов).
-
Код и структура: Код хорошо структурирован и прокомментирован, но использован устаревший фреймворк (15/20 баллов).
Итоговый балл: 70/100
Теперь, когда вы понимаете, что такое Демонстрационный экзамен и как он оценивается, давайте поговорим о нашей системе оценивания, которая была разработана для улучшения и упрощения этого процесса.
Исходя из данного экзамена в системе, которая представлена у них для оценки работ – захотелось создать такую же систему, только с большее обширным функционалом и интеграцией с системой ISPmanager.
Основные возможности системы
Модули и критерии оценки: В каждой группе студентов есть модули с установленными критериями оценки.
Интеграция с ISPmanager: Возможность загрузки раздаточного материала и данных для входа на сервер через ISPmanager.
-
Выгрузка итоговых отчетов: Итоговые отчеты можно выгрузить в нескольких форматах:
Отдельные листы для каждого студента в виде архива.
Раздаточный материал с данными для входа на сервер.
Общая ведомость, содержащая данные по всем модулям, критериям и итоговым баллам студентов.
Загрузка данных через Excel: Возможность загрузки групп, модулей и критериев с их описанием через Excel файлы с учётом перебора баллов.
Технические детали
Бэкенд: Django Rest Framework (DRF). DRF позволяет нам создавать надежные и масштабируемые API для взаимодействия с фронтендом. Я выбрал его за:
• Отличную поддержку сериализации данных.
• Удобные инструменты для аутентификации и авторизации.
• Простоту интеграции с различными базами данных и внешними сервисами.Фронтенд: React + MaterialUI. React обеспечивает высокую производительность и гибкость при разработке пользовательских интерфейсов, а MaterialUI добавляет современные и удобные компоненты. Я выбрал их для:
• Создания отзывчивых и интерактивных интерфейсов.
• Повышения скорости разработки благодаря компонентному подходу.
• Интуитивно понятного и привлекательного дизайна.
Примеры использования
Приведем несколько примеров использования нашей системы:
-
Управление модулями и группами: Преподаватель может легко создать новые модули, установить критерии оценки и прикрепить их к нужной группе студентов.
Загрузка данных через Excel: Преподаватель может быстро загрузить группы, модули и критерии из Excel файла, что значительно упрощает настройку системы.
Выгрузка отчетов: После проведения экзаменов преподаватель может выгрузить итоговые отчеты в нужном формате и проанализировать результаты студентов.
Преимущества для пользователей
Наша система предоставляет множество преимуществ для различных пользователей:
Преподаватели: Удобство управления экзаменами и оценками, быстрая выгрузка отчетов.
Студенты: Простой доступ к результатам и раздаточным материалам.
На странице модули, находятся модули – которые пользователь добавил, включая баллы и к какой группе относится данный модуль. Можно отфильтровать по группам.
![Модули Модули](https://habrastorage.org/getpro/habr/upload_files/b31/138/22d/b3113822daa35b8378a86b69ada28f28.png)
На странице группы, находятся группы – в них находятся студенты, переходя в группу, можем добавить или удалить студента.
![Группы Группы](https://habrastorage.org/getpro/habr/upload_files/6b8/bcb/293/6b8bcb293df68969245be5d557f04224.png)
![Редактирование группы Редактирование группы](https://habrastorage.org/getpro/habr/upload_files/566/127/34a/56612734a0e6ef18c183a8bc0210a3d5.png)
На странице критерии находиться фильтрация по названию, и баллу. Можно выбрать Группу или Модуль. Имеется смена оформления данной страницы.
![Критерии Критерии](https://habrastorage.org/getpro/habr/upload_files/6c4/aa6/867/6c4aa6867b4ecab062b06d5b1b4fbe6a.png)
![Смена оформления страницы "Критерии" в виде карточек Смена оформления страницы "Критерии" в виде карточек](https://habrastorage.org/getpro/habr/upload_files/ec8/71f/855/ec871f855028d66c79e2004a7cbb2e87.png)
На странице Студенты – можем распечатать данные, посмотреть данные студента, удалить/редактировать студента.
![Студенты Студенты](https://habrastorage.org/getpro/habr/upload_files/ca4/274/1b5/ca42741b50430c020012d76808e789ce.png)
![Настройка печати Настройка печати](https://habrastorage.org/getpro/habr/upload_files/d3a/262/e54/d3a262e54e22712bc6e6c47bb1ffbb77.png)
На странице Оценивание – выбираем Группу, Студента, Модуль. Критерии которые относятся к данному модулю, появятся на странице с возможностью оценить их на максимальный балл, либо самому вписать баллы и сохранить данные.
![Оценивание работы Оценивание работы](https://habrastorage.org/getpro/habr/upload_files/098/f14/3de/098f143de1224c9103d0299322c008d4.png)
После оценки работы, можем скачать общую ведомость, с данными результатами:
![Результат экзамена Результат экзамена](https://habrastorage.org/getpro/habr/upload_files/64e/5a8/95a/64e5a895a53e87b828c8637962e5e601.png)
Интеграция с ISPmanager 6
Исходя из документации (https://www.ispmanager.ru/docs/ispmanager/ispmanager-api): Создаём пользователя (функция user.add). Так как есть возможность создавать на пользователей на базе какого-то шаблона (WSR в нашем случае). То происходит асинхронное создание пользователя + сайта + бд.
def generate_random_string(length=6): # Рандомные строки для домена и пароля
characters = string.ascii_letters + string.digits
return ''.join(secrets.choice(characters) for i in range(length))
async def create_user(name, fullname, passwd):
url = f'{settings.ISP_API}?authinfo={settings.location_user}:{settings.location_password}&out=json&lang=ru' \
f'&func=user.add' \
f'&name={name}' \
f'&fullname={fullname}' \
f'&passwd={passwd}' \
f'&domain={name}.domain.ru' \
f'&preset={settings.preset}' \
f'&status=1&sok=ok'
async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
return await response.json()
Система оценивания
Считается сумма всех баллов исходя из критериев.
@api_view(['GET', 'PUT'])
@permission_classes([IsAuthenticated])
def get_or_update_saved_results(request, student_id, module_id):
if request.method == 'GET':
saved_results = StudentResult.objects.filter(student_id=student_id, criterion__module_id=module_id)
serializer = StudentResultSerializer(saved_results, many=True)
return Response(serializer.data)
elif request.method == 'PUT':
existing_results = StudentResult.objects.filter(student_id=student_id, criterion__module_id=module_id)
existing_results_dict = {result.criterion_id: result for result in existing_results}
for result_data in request.data:
criterion_id = result_data['criterion']
if criterion_id in existing_results_dict:
result_instance = existing_results_dict[criterion_id]
previous_score = result_instance.score
result_serializer = StudentResultSerializer(result_instance, data=result_data)
else:
result_serializer = StudentResultSerializer(data=result_data)
if result_serializer.is_valid():
# Проверяем, что балл соответствует максимальному баллу для критерия
criterion = Criterion.objects.get(id=criterion_id)
max_score = criterion.weight
score = result_serializer.validated_data['score']
if score < 0 or score > max_score:
return Response(
{'message': f'Балл для критерия {criterion.title} должен быть в диапазоне от 0 до {max_score}'},
status=status.HTTP_400_BAD_REQUEST)
result_serializer.save()
if criterion_id in existing_results_dict:
result_instance.previous_score = previous_score
result_instance.save()
else:
return Response(result_serializer.errors, status=status.HTTP_400_BAD_REQUEST)
updated_results = StudentResult.objects.filter(student_id=student_id, criterion__module_id=module_id)
updated_results_serializer = StudentResultSerializer(updated_results, many=True)
return Response(updated_results_serializer.data, status=status.HTTP_201_CREATED)
Видеообзор
Я рад рассказать о своей системой оценивания. Если у вас есть вопросы или предложения, не стесняйтесь обращаться.
Спасибо за внимание :)
Комментарии (6)
Iron_Butterfly
05.08.2024 22:07Да, про интеграцию с ispmanager тоже очень интересно было бы услышать.
malfin Автор
05.08.2024 22:07Дополнил статью
Интеграция с ISP Manager - создано обычное создание пользователя в системе.
Fox_exe
Я что-то не понял. В статье упоминается "Интеграция с ISP Manager", но далее ни слова про это.
Говориться про Rest framework, но далее ни слова про него.
Зато есть скриншоты функционала, который реализуется штатной админкой Django даже без DRF.
Быть может тут описана "Система оценивания"? Её принцип работы, формулы расчёта баллов и т.п.? Нет, этого тоже нет...
Таки, о чём статья то была?
malfin Автор
Дополнил статью. Конечно можно было использовать Django без DRF. Но я захотел написать на DRF. Система оценивания очень простая, складываются все баллы по критериям.
Интеграция с ISP Manager - создано обычное создание пользователя в системе.