Skip to content

Сдача и Оценивание Работ (Submissions)

В системе "Сдача и оценивание работ" представлена раздельная функциональность для студентов и преподавателей. Она включает механизм отправки выполненных заданий студентами и интерфейс для оценки этих работ преподавателями.

1. Страница Сдачи Домашнего Задания

Студенты могут сдавать выполненные задания, перейдя на страницу с адресом /homeworks/<homework_id>/submit/. На этой странице студенты видят форму для добавления текста выполнения задания. Шаблон формы submission.html выглядит следующим образом:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Сдача домашнего задания</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
</head>
<body>
    <div class="container mt-5">
        <h2 class="mb-4">Сдача домашнего задания</h2>

        <form method="post">
            {% csrf_token %}
            {{ form.as_p }}

            <button type="submit" class="btn btn-primary mt-3">Отправить</button>
        </form>
    </div>
</body>
</html>

Декоратор student_required

Для обеспечения безопасности доступа к этому представлению используется декоратор student_required, который проверяет роль пользователя. Если роль пользователя — student, он может видеть форму сдачи. В противном случае преподаватель перенаправляется к управлению заданиями.

2. Просмотр Выполненных Работ (для преподавателя)

Преподаватели могут просматривать сданные работы на странице /homeworks/list/submissions/. Эта страница доступна только преподавателям благодаря декоратору teacher_required, который перенаправляет студентов к их списку домашних заданий.

Шаблон submission_list.html отображает список сданных работ с возможностью перехода к странице оценивания каждой работы:

{% if submissions %}
    <table class="table table-striped">
        <thead>
            <tr>
                <th>Ученик</th>
                <th>Текст выполнения</th>
                <th>Дата сдачи</th>
                <th>Оценка</th>
                <th>Действия</th>
            </tr>
        </thead>
        <tbody>
            {% for submission in submissions %}
                <tr>
                    <td>{{ submission.student.username }}</td>
                    <td>{{ submission.submitted_text }}</td>
                    <td>{{ submission.submitted_at|date:"d.m.Y H:i" }}</td>
                    <td>{{ submission.grade|default:"Не оценено" }}</td>
                    <td>
                        <a href="{% url 'grade_submission' submission.id %}" class="btn btn-warning btn-sm">Оценить</a>
                    </td>
                </tr>
            {% endfor %}
        </tbody>
    </table>
{% endif %}

Класс SubmissionListView

Этот класс используется для отображения всех выполненных заданий, доступных преподавателям. Благодаря методу get_queryset, SubmissionListView получает все объекты Submission, связанные с выбранным заданием.

3. Оценивание Выполненных Работ

Преподаватели могут оценивать работы, переходя по ссылке "Оценить" в submission_list.html. Эта ссылка ведет на страницу /homeworks/submission/<submission_id>/grade/, где преподаватель может видеть полную информацию о сдаче и оставить оценку.

Шаблон grade_submission.html позволяет преподавателю выставить оценку:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Оценить выполнение задания</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
</head>
<body>
    <div class="container mt-5">
        <h2 class="mb-4">Оценка выполнения задания</h2>

        <div class="card">
            <div class="card-body">
                <h5 class="card-title">Предмет: {{ submission.homework.subject.name }}</h5>
                <p><strong>Ученик:</strong> {{ submission.student.username }}</p>
                <p><strong>Текст выполнения:</strong> {{ submission.submitted_text }}</p>
                <p><strong>Дата сдачи:</strong> {{ submission.submitted_at|date:"d.m.Y H:i" }}</p>
            </div>
        </div>

        <form method="post" class="mt-4">
            {% csrf_token %}
            {{ form.as_p }}
            <button type="submit" class="btn btn-primary">Сохранить оценку</button>
        </form>
    </div>
</body>
</html>

Класс SubmissionGradeView

Класс SubmissionGradeView обрабатывает обновление оценки в базе данных. Он наследуется от UpdateView и получает объект Submission по submission_id. Чтобы убедиться, что доступ к оценке имеют только преподаватели, используется метод test_func, проверяющий роль пользователя.

После сохранения оценки пользователь перенаправляется обратно на submission_list.

URL-пути и маршрутизация

Взаимодействие между ссылками и представлениями организовано через следующие URL-пути:

  • Сдача домашнего задания студентом: /homeworks/<homework_id>/submit/
  • Просмотр списка выполненных заданий (для преподавателей): /homeworks/list/submissions/
  • Страница для оценки конкретной работы (для преподавателей): /homeworks/submission/<submission_id>/grade/