# -*- coding: iso-8859-15 -*-
from django.conf import settings
-from django.contrib.auth.models import User
+from django.contrib.auth.models import User, Permission
+from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import ValidationError
from django.core.urlresolvers import resolve
from django.http import HttpRequest
status_code=302, target_status_code=404 or 200)
self.client.login(username='yoda', password='use_d@_force')
+ response = self.client.get('/q/marking/')
+ self.assertRedirects(response, 'accounts/login/?next=/q/marking/',
+ status_code=302, target_status_code=404 or 200)
+
+ self.assertFalse(teacher.has_perm('view_sittings', teacher))
+ teacher.user_permissions.add(
+ Permission.objects.get(codename='view_sittings'))
+
response = self.client.get('/q/marking/')
self.assertContains(response, 'test quiz 1')
import random
-from django.contrib.auth.decorators import login_required
+from django.contrib.auth.decorators import login_required, permission_required
from django.shortcuts import get_object_or_404, render, render_to_response
from django.template import RequestContext
from django.utils.decorators import method_decorator
from .models import Quiz, Category, Progress, Sitting, Question
+class QuizMarkerMixin(object):
+ @method_decorator(login_required)
+ @method_decorator(permission_required('quiz.view_sittings'))
+ def dispatch(self, *args, **kwargs):
+ return super(QuizMarkerMixin, self).dispatch(*args, **kwargs)
+
+
class QuizListView(ListView):
model = Quiz
return context
-class QuizMarkingList(ListView):
+class QuizMarkingList(QuizMarkerMixin, ListView):
model = Sitting
- @method_decorator(login_required)
def dispatch(self, request, *args, **kwargs):
return super(QuizMarkingList, self).dispatch(request, *args, **kwargs)
return queryset.filter(complete=True)
-class QuizMarkingDetail(DetailView):
+class QuizMarkingDetail(QuizMarkerMixin, DetailView):
model = Sitting
- @method_decorator(login_required)
def dispatch(self, request, *args, **kwargs):
return super(QuizMarkingDetail, self)\
.dispatch(request, *args, **kwargs)