diff --git a/apps/school/urls.py b/apps/school/urls.py index e9940341..d14d4a5a 100644 --- a/apps/school/urls.py +++ b/apps/school/urls.py @@ -1,8 +1,9 @@ from django.urls import path, include -from .views import LiveLessonsView, LiveLessonEditView +from .views import LiveLessonsView, LiveLessonEditView, LiveLessonsDetailView urlpatterns = [ path('lessons/', LiveLessonsView.as_view(), name='lessons'), path('lessons//edit', LiveLessonEditView.as_view(), name='lessons-edit'), + path('lessons//', LiveLessonsDetailView.as_view(), name='lesson-detail'), ] diff --git a/apps/school/views.py b/apps/school/views.py index b33f126e..a0847af1 100644 --- a/apps/school/views.py +++ b/apps/school/views.py @@ -1,28 +1,41 @@ -from django.contrib.auth.decorators import login_required +from django.contrib.auth import get_user_model +from django.contrib.auth.decorators import login_required, user_passes_test from django.shortcuts import get_object_or_404 from django.utils.decorators import method_decorator -from django.views.generic import ListView, UpdateView, TemplateView +from django.views.generic import ListView, UpdateView, TemplateView, DetailView from .models import LiveLesson +User = get_user_model() + +def is_admin_or_teacher(function=None, login_url=None): + actual_decorator = user_passes_test( + lambda u: u.role in [User.ADMIN_ROLE, User.TEACHER_ROLE], + login_url=login_url, + ) + if function: + return actual_decorator(function) + return actual_decorator + + +@method_decorator([login_required, is_admin_or_teacher], name='dispatch') class LiveLessonsView(ListView): model = LiveLesson template_name = 'school/livelessons_list.html' - def get(self, request, pk=None): - if request.user.role not in [User.ADMIN_ROLE, User.TEACHER_ROLE]: - raise Http404 - return super().get(request) + +@method_decorator([login_required, is_admin_or_teacher], name='dispatch') +class LiveLessonsDetailView(DetailView): + model = LiveLesson + template_name = 'school/livelesson_detail.html' -@method_decorator(login_required, name='dispatch') +@method_decorator([login_required, is_admin_or_teacher], name='dispatch') class LiveLessonEditView(TemplateView): template_name = 'course/course_edit.html' def get(self, request, pk=None): - if request.user.role not in [User.ADMIN_ROLE, User.TEACHER_ROLE]: - raise Http404 if pk: self.object = get_object_or_404(LiveLesson, pk=pk) else: