]> git.parisson.com Git - django_quiz.git/commitdiff
moved towards CBVs for simples views, next step is to convert complicated views into...
authorTom Walker <tomwalker0472@gmail.com>
Fri, 4 Jul 2014 14:33:25 +0000 (15:33 +0100)
committerTom Walker <tomwalker0472@gmail.com>
Fri, 4 Jul 2014 14:33:25 +0000 (15:33 +0100)
quiz/templates/list_categories.html [deleted file]
quiz/templates/progress.html
quiz/templates/quiz/quiz_list.html [new file with mode: 0644]
quiz/templates/quiz_index.html [deleted file]
quiz/templates/view_quiz_category.html
quiz/tests.py
quiz/urls.py
quiz/views.py

diff --git a/quiz/templates/list_categories.html b/quiz/templates/list_categories.html
deleted file mode 100644 (file)
index 1ae019b..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-{% extends 'base.html' %}
-{% block title %}All Quizzes{% endblock %}
-
-{% block content %}
-<h2>Category list</h2>
-
-<ul>
-  {% for cat in categories %}
-  <li>
-       <a href="{% url 'quiz.views.view_category' slug=cat.category %}">
-         {{ cat.category }}
-       </a>
-  </li>
-  {% endfor %}
-</ul>
-
-{% endblock %}
-
-{% block right-sidebar %}
-<h2>Sponsored Advertisements</h2>
-{% endblock %}
index 32c6902547325cbe2d2e7ff4be65a5b48158baa6..3912f5fd028e348ec19b606064f8cb253671992b 100644 (file)
                <div class="alert alert-block">
                        <button type="button" class="close" data-dismiss="alert">&times;</button>
                        <ul class="unstyled">
-                       <li>
+                         <li>
                                <h4>Thank you for joining this website. Welcome to your progress page.</h4>
-                       </li>
-               </ul>
+                         </li>
+                       </ul>
                </div>
 
 {% endif %}
diff --git a/quiz/templates/quiz/quiz_list.html b/quiz/templates/quiz/quiz_list.html
new file mode 100644 (file)
index 0000000..a5466ea
--- /dev/null
@@ -0,0 +1,19 @@
+{% extends 'base.html' %}
+{% block title %}All Quizzes{% endblock %}
+
+{% block content %}
+<h2>Quiz list</h2>
+    {% if quiz_list %}
+        <ul>
+        {% for quiz in quiz_list %}
+            <li><a href="{% url 'quiz.views.quiz_take' quiz_name=quiz.url %}">{{ quiz.title }}</a></li>
+        {% endfor %}
+        </ul>
+    {% else %}
+        <p>There are no available quizzes.</p>
+    {% endif %}
+{% endblock %}
+
+{% block right-sidebar %}
+<h2>Sponsored Advertisements</h2>
+{% endblock %}
diff --git a/quiz/templates/quiz_index.html b/quiz/templates/quiz_index.html
deleted file mode 100644 (file)
index a5466ea..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-{% extends 'base.html' %}
-{% block title %}All Quizzes{% endblock %}
-
-{% block content %}
-<h2>Quiz list</h2>
-    {% if quiz_list %}
-        <ul>
-        {% for quiz in quiz_list %}
-            <li><a href="{% url 'quiz.views.quiz_take' quiz_name=quiz.url %}">{{ quiz.title }}</a></li>
-        {% endfor %}
-        </ul>
-    {% else %}
-        <p>There are no available quizzes.</p>
-    {% endif %}
-{% endblock %}
-
-{% block right-sidebar %}
-<h2>Sponsored Advertisements</h2>
-{% endblock %}
index b60a0c9a94738762c3f1a292140879da90e21a5e..9d9d555c01d6265dda7b1fb5256cb9922c2bd6a8 100644 (file)
@@ -4,6 +4,7 @@
 {% block content %}
 <h1>Quizzes in {{ category.category }}</h1>
 
+  {% with object_list as quizzes %}
     {% if quizzes %}
         <ul>
         {% for quiz in quizzes %}
@@ -17,4 +18,5 @@
     {% else %}
         <p>There are no quizzes</p>
     {% endif %}
+  {% endwith %}
 {% endblock %}
index 4b8561af8dce12022ad6eeae0dcf211cfa3f8a16..cde453eecc79e9d0bbd32c9e2d77538683a08e9c 100644 (file)
@@ -234,6 +234,7 @@ class TestNonQuestionViews(TestCase):
     def test_index(self):
         response = self.client.get('/q/')
         self.assertContains(response, 'test quiz 1')
+        self.assertTemplateUsed('quiz_list.html')
 
     def test_list_categories(self):
         response = self.client.get('/q/category/')
@@ -249,16 +250,8 @@ class TestNonQuestionViews(TestCase):
         self.assertNotContains(response, 'test quiz 2')
 
     def test_progress_anon(self):
-        response = self.client.get('/q/progress/')
-        self.assertContains(response, 'Sign up')
-
-        session = self.client.session
-        session['session_score'] = 1
-        session['session_score_possible'] = 2
-        session.save()
-
-        response = self.client.get('/q/progress/')
-        self.assertContains(response, '1 out of 2')
+        response = self.client.get('/q/progress/', follow=False)
+        self.assertTemplateNotUsed(response, 'progress.html')
 
     def test_progress_user(self):
         self.user = User.objects.create_user(username='jacob',
index ba4d8b55fce130b286ce3718ce73cdf5fb933edf..63826c00f596248c7551be890b30589d0595185c 100644 (file)
@@ -1,24 +1,27 @@
 from django.conf.urls import patterns, url
 
+from .views import QuizListView, CategoriesListView,\
+    ViewQuizListByCategory, QuizUserProgressView
+
 
 urlpatterns = patterns('quiz.views',
                        # quiz base url
                        url(regex=r'^$',
-                           view='index',
+                           view=QuizListView.as_view(),
                            name='quiz_index'),
 
                        url(regex=r'^category/$',
-                           view='list_categories',
+                           view=CategoriesListView.as_view(),
                            name='quiz_category_list_all'),
 
                        # quiz category: list quizzes
-                       url(regex=r'^category/(?P<slug>[\w.-]+)/$',
-                           view='view_category',
+                       url(regex=r'^category/(?P<category_name>[\w.-]+)/$',
+                           view=ViewQuizListByCategory.as_view(),
                            name='quiz_category_list_matching'),
 
                        #  progress
                        url(regex=r'^progress/$',
-                           view='progress',
+                           view=QuizUserProgressView.as_view(),
                            name='quiz_progress'),
 
                        #  passes variable 'quiz_name' to quiz_take view
index a455e3117df29d527db34430327c5bda77fc05a4..9c2374adc9e87c5cbf7c0c5531108eef62f89dbd 100644 (file)
@@ -1,30 +1,58 @@
 import random
 
-from django.template import RequestContext
+from django.contrib.auth.decorators import login_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 django.views.generic import ListView, TemplateView
 
 from .models import Quiz, Category, Progress, Sitting, Question
 
 
-def index(request):
-    all_quizzes = Quiz.objects.all()
-    return render(request, 'quiz_index.html',
-                  {'quiz_list': all_quizzes})
+class QuizListView(ListView):
+    model = Quiz
+
+
+class CategoriesListView(ListView):
+    model = Category
+
+
+class ViewQuizListByCategory(ListView):
+    model = Quiz
+    template_name = 'view_quiz_category.html'
 
+    def get_context_data(self, **kwargs):
+        context = super(ViewQuizListByCategory, self)\
+            .get_context_data(**kwargs)
 
-def list_categories(request):
-    return render(request, 'list_categories.html',
-                  {'categories': Category.objects.all()})
+        category = get_object_or_404(Category,
+                                     category=self.kwargs['category_name'])
+        context['category'] = category
+        return context
 
+    def get_queryset(self):
+        category = get_object_or_404(Category,
+                                     category=self.kwargs['category_name'])
+        queryset = super(ViewQuizListByCategory, self).get_queryset()
+        return queryset.filter(category=category)
 
-def view_category(request, slug):
-    category = get_object_or_404(Category,
-                                 category=slug.replace(' ', '-').lower())
-    quizzes = Quiz.objects.filter(category=category)
 
-    return render(request, 'view_quiz_category.html',
-                  {'category': category,
-                   'quizzes': quizzes})
+class QuizUserProgressView(TemplateView):
+    template_name = 'progress.html'
+
+    @method_decorator(login_required)
+    def dispatch(self, request, *args, **kwargs):
+        return super(QuizUserProgressView, self)\
+            .dispatch(request, *args, **kwargs)
+
+    def get_context_data(self, **kwargs):
+        context = super(QuizUserProgressView, self).get_context_data(**kwargs)
+
+        progress = get_object_or_404(Progress, user=self.request.user)
+        context['cat_scores'] = progress.list_all_cat_scores()
+        context['exams'] = progress.show_exams()
+
+        return context
 
 
 def quiz_take(request, quiz_name):
@@ -345,30 +373,3 @@ def anon_session_score(request, add=0, possible=0):
 
     return request.session["session_score"], \
         request.session["session_score_possible"]
-
-
-def progress(request):
-    if request.user.is_authenticated() is not True:
-        # display session score and encourage to sign up
-        score, possible = anon_session_score(request)
-        return render_to_response('signup.html',
-                                  {'anon_score': score,
-                                   'anon_possible': possible},
-                                  context_instance=RequestContext(request))
-
-    try:
-        progress = Progress.objects.get(user=request.user)
-
-    except Progress.DoesNotExist:
-        progress = Progress.objects.new_progress(request.user)
-        return render_to_response('progress.html',
-                                  {'new_user': True},
-                                  context_instance=RequestContext(request))
-
-    cat_scores = progress.list_all_cat_scores()
-    exams = progress.show_exams()
-
-    return render_to_response('progress.html',
-                              {'cat_scores': cat_scores,
-                               'exams': exams},
-                              context_instance=RequestContext(request))