Документация: Панель управления (Dashboard)
Панель управления (Dashboard)
Панель управления зависит от роли пользователя: студента или преподавателя. Каждый из них имеет доступ к отдельным функциям и данным в системе. В этой документации описано, как происходит авторизация и маршрутизация для обоих типов пользователей.
URL-маршруты для Dashboard
Маршруты для страницы dashboard и других связанных разделов настроены в файле urls.py.
from django.urls import path
from django.contrib.auth.views import LogoutView
from . import views
urlpatterns = [
path('dashboard/', views.UserDashboardView.as_view(), name='dashboard'),
path('homeworks/', views.HomeworkListView.as_view(), name='homework_list'),
path('student/homeworks/', views.StudentHomeworkListView.as_view(), name='student_homeworks'),
path('homeworks/create/', views.HomeworkCreateView.as_view(), name='homework_create'),
path('homeworks//submit/', views.SubmissionCreateView.as_view(), name='submit_homework'),
path('homeworks/list/submissions/', views.SubmissionListView.as_view(), name='submission_list'),
path('homeworks/submission//grade/', views.SubmissionGradeView.as_view(), name='grade_submission'),
path('grades/admin/', views.AdminGradeTableView.as_view(), name='admin_grade_table'),
path('grades/student/', views.StudentGradeTableView.as_view(), name='student_grade_table')
]
Описание функций и классов, используемых в панели управления
Функции панели управления для студента
- Просмотр заданий: Студенты могут увидеть все домашние задания, доступные для выполнения, через маршрут
student/homeworks/иStudentHomeworkListViewвviews.py. - Отправка выполненного задания: Студенты могут прикрепить выполнение задания через маршрут
homeworks/<int:homework_id>/submit/, который связан сSubmissionCreateView. - Просмотр оценок: Через маршрут
grades/student/иStudentGradeTableView, студенты могут просматривать свои оценки.
Функции панели управления для преподавателя
- Добавление нового задания: Преподаватели могут создавать новые задания через маршрут
homeworks/create/иHomeworkCreateView. - Проверка и оценка выполнения заданий: Через маршрут
homeworks/list/submissions/преподаватели могут видеть выполненные студентами задания и выставлять оценки с помощьюSubmissionGradeView. - Управление предметами: Преподаватели могут добавлять и редактировать предметы через маршруты
subjects/add/иsubjects/<int:pk>/edit/. - Просмотр оценок всех студентов: Через маршрут
grades/admin/преподаватели могут просматривать таблицу с оценками всех студентов.
Класс UserDashboardView для панели управления
Класс UserDashboardView реализует общую панель для студентов и преподавателей. Он отображает только те элементы, которые доступны по роли пользователя, проверяя role пользователя в базе данных.
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import ListView
from .models import Submission
class UserDashboardView(LoginRequiredMixin, ListView):
template_name = 'dashboard.html'
context_object_name = 'submissions'
def get_queryset(self):
user = self.request.user
if user.role == 'student':
return Submission.objects.filter(student=user).select_related('homework')
return Submission.objects.filter(homework__subject__teachers=user).select_related('homework', 'student')
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
user = self.request.user
context['is_student'] = user.role == 'student'
return context
Ключевые функции UserDashboardView
get_queryset: Метод возвращает список заданий для студента или преподавателя в зависимости от роли. Если авторизован студент, отображаются только его задания. Если преподаватель, то задания всех студентов, проходящих его курсы.get_context_data: Метод добавляет дополнительный контекстis_studentдля проверки в шаблоне, чтобы различать отображаемые функции для студентов и преподавателей.
Шаблон dashboard.html
Шаблон dashboard.html проверяет роль пользователя через is_student и отображает соответствующие функции в зависимости от роли. Например, кнопка "Добавить задание" отображается только преподавателям, а студентам доступны кнопки для отправки выполненного задания.
Шаблон
<!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>
{% include 'navbar.html' %}
<div class="container mt-5">
<h2 class="mb-4 text-center">Панель управления</h2>
<div class="card mb-4">
<div class="card-body">
<h4 class="card-title">Профиль пользователя</h4>
<p><strong>Имя пользователя:</strong> {{ user.username }}</p>
<p><strong>Email:</strong> {{ user.email }}</p>
<p><strong>Роль:</strong> {{ user.role }}</p>
</div>
</div>
{% if is_student %}
<h4>Ваши домашние задания и оценки:</h4>
<a href="{% url 'student_grade_table' %}" class="btn btn-primary mb-3">Мои оценки</a>
<a href="{% url 'student_homeworks' %}" class="btn btn-info mb-3">Просмотр заданий</a>
<a href="{% url 'submit_homework' homework_id=1 %}" class="btn btn-success mb-3">Прикрепить задание</a>
{% else %}
<h4>Оценки всех студентов:</h4>
<a href="{% url 'admin_grade_table' %}" class="btn btn-primary mb-3">Оценки всех студентов</a>
<a href="{% url 'submission_list' %}" class="btn btn-info mb-3">Управление заданиями</a>
{% endif %}
{% if submissions %}
<table class="table table-striped">
<thead>
<tr>
<th>Ученик</th>
{% if not is_student %}
<th>Класс</th>
{% endif %}
<th>Задание</th>
<th>Дата сдачи</th>
<th>Оценка</th>
</tr>
</thead>
<tbody>
{% for submission in submissions %}
<tr>
<td>{{ submission.student.username }}</td>
{% if not is_student %}
<td>{{ submission.student.student_class.name }}</td>
{% endif %}
<td>{{ submission.homework.subject.name }}</td>
<td>{{ submission.submitted_at|date:"d.m.Y H:i" }}</td>
<td>{{ submission.grade|default:"Не оценено" }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<p class="alert alert-warning">Нет данных о сдачах заданий.</p>
{% endif %}
</div>
</body>
</html>
Маршрутизация и взаимодействие
- После входа пользователя через
loginон перенаправляется наdashboard, где доступные функции зависят от роли. - Каждый маршрут, относящийся к панели управления, имеет соответствующее представление и шаблон, определяющий, какие функции доступны.