Как стать автором
Обновить

Система оценивания для проведения экзаменов, срезов в СПО

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров1.4K
Страница авторизации
Страница авторизации

Введение

Привет всем! Сегодня я расскажу вам о моей системе оценивания, которая создана для проведения экзаменов и оценки знаний студентов. Система построена на Django Rest Framework (DRF) для бэкенда и React с MaterialUI для фронтенда. Я добавил множество полезных функций, включая интеграцию с ISPmanager, которые делают систему удобной и эффективной.

Пару слов с чего начиналось всё

Всё началось с Демонстрационного экзамена – это форма итоговой аттестации, направленная на проверку практических знаний и умений студентов в реальных условиях. Он используется для оценки способности студентов применять теоретические знания на практике и справляться с профессиональными задачами. Такой экзамен особенно важен в профессиональном и техническом образовании, где практические навыки играют ключевую роль.

Пример оценки работ на Демонстрационном экзамене

Оценка работ на ДЭ проводится по нескольким критериям, которые могут включать:

1. Точность выполнения задания

2. Качество выполнения

4. Креативность и инновационность

5. Уровень профессиональных навыков

Пример задания: Создание функционального веб-сайта для онлайн-магазина.

Ниже приведён пример

  1. Функциональность (50 баллов)

    1. Сайт должен содержать главную страницу, страницу товаров, корзину и форму обратной связи.

    2. Вся навигация должна быть рабочей, без ошибок.

  2. Дизайн и пользовательский интерфейс (30 баллов)

    1. Сайт должен быть визуально привлекательным и удобным для пользователей.

    2. Использование HTML5 & CSS и JavaScript для улучшения интерфейса.

  3. Код и структура (20 баллов)

    1. Код должен быть чистым, хорошо структурированным и прокомментированным.

    2. Использование современных технологий и фреймворков, таких как jQuery и Laravel/Yii2/Django.

Пример оценки работы студента

  1. Функциональность: Студент создал все необходимые страницы, но форма обратной связи не работает (30/50 баллов).

  2. Дизайн и пользовательский интерфейс: Сайт выглядит профессионально и удобно, но есть мелкие недочеты в верстке (25/30 баллов).

  3. Код и структура: Код хорошо структурирован и прокомментирован, но использован устаревший фреймворк (15/20 баллов).

    Итоговый балл: 70/100

Теперь, когда вы понимаете, что такое Демонстрационный экзамен и как он оценивается, давайте поговорим о нашей системе оценивания, которая была разработана для улучшения и упрощения этого процесса.

Исходя из данного экзамена в системе, которая представлена у них для оценки работ – захотелось создать такую же систему, только с большее обширным функционалом и интеграцией с системой ISPmanager.

Основные возможности системы

  1. Модули и критерии оценки: В каждой группе студентов есть модули с установленными критериями оценки.

  2. Интеграция с ISPmanager: Возможность загрузки раздаточного материала и данных для входа на сервер через ISPmanager.

  3. Выгрузка итоговых отчетов: Итоговые отчеты можно выгрузить в нескольких форматах:

    1. Отдельные листы для каждого студента в виде архива.

    2. Раздаточный материал с данными для входа на сервер.

    3. Общая ведомость, содержащая данные по всем модулям, критериям и итоговым баллам студентов.

  4. Загрузка данных через Excel: Возможность загрузки групп, модулей и критериев с их описанием через Excel файлы с учётом перебора баллов.

Технические детали

  1. Бэкенд: Django Rest Framework (DRF). DRF позволяет нам создавать надежные и масштабируемые API для взаимодействия с фронтендом. Я выбрал его за:
    • Отличную поддержку сериализации данных.
    • Удобные инструменты для аутентификации и авторизации.
    • Простоту интеграции с различными базами данных и внешними сервисами.

  2. Фронтенд: React + MaterialUI. React обеспечивает высокую производительность и гибкость при разработке пользовательских интерфейсов, а MaterialUI добавляет современные и удобные компоненты. Я выбрал их для:
    • Создания отзывчивых и интерактивных интерфейсов.
    • Повышения скорости разработки благодаря компонентному подходу.
    • Интуитивно понятного и привлекательного дизайна.

Примеры использования

Приведем несколько примеров использования нашей системы:

  1. Управление модулями и группами: Преподаватель может легко создать новые модули, установить критерии оценки и прикрепить их к нужной группе студентов.

    1. Загрузка данных через Excel: Преподаватель может быстро загрузить группы, модули и критерии из Excel файла, что значительно упрощает настройку системы.

    2. Выгрузка отчетов: После проведения экзаменов преподаватель может выгрузить итоговые отчеты в нужном формате и проанализировать результаты студентов.

Преимущества для пользователей

Наша система предоставляет множество преимуществ для различных пользователей:

  1. Преподаватели: Удобство управления экзаменами и оценками, быстрая выгрузка отчетов.

  2. Студенты: Простой доступ к результатам и раздаточным материалам.

На странице модули, находятся модули – которые пользователь добавил, включая баллы и к какой группе относится данный модуль. Можно отфильтровать по группам.

Модули
Модули

На странице группы, находятся группы – в них находятся студенты, переходя в группу, можем добавить или удалить студента.

Группы
Группы
Редактирование группы
Редактирование группы

На странице критерии находиться фильтрация по названию, и баллу. Можно выбрать Группу или Модуль. Имеется смена оформления данной страницы.

Критерии
Критерии
Смена оформления страницы "Критерии" в виде карточек
Смена оформления страницы "Критерии" в виде карточек

На странице Студенты – можем распечатать данные, посмотреть данные студента, удалить/редактировать студента.

Студенты
Студенты
Настройка печати
Настройка печати

На странице Оценивание – выбираем Группу, Студента, Модуль. Критерии которые относятся к данному модулю, появятся на странице с возможностью оценить их на максимальный балл, либо самому вписать баллы и сохранить данные.

Оценивание работы
Оценивание работы

После оценки работы, можем скачать общую ведомость, с данными результатами:

Результат экзамена
Результат экзамена

Интеграция с 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)

Видеообзор

Я рад рассказать о своей системой оценивания. Если у вас есть вопросы или предложения, не стесняйтесь обращаться.

Спасибо за внимание :)

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Открыть доступ для СПО?
61.11% Да11
22.22% Нет4
16.67% Узнать результаты3
Проголосовали 18 пользователей. Воздержались 2 пользователя.
Теги:
Хабы:
Всего голосов 5: ↑3 и ↓2+3
Комментарии6

Публикации

Работа

Ближайшие события