From a824cba46c69175e2f94b183916db9db69911c6f Mon Sep 17 00:00:00 2001 From: Hubert Jankowski Date: Mon, 17 Jan 2022 16:05:26 +0100 Subject: [PATCH] Tests result --- templates/result.html | 12 ++++++---- trials/views.py | 56 +++++++++++++++++++++++++++---------------- 2 files changed, 42 insertions(+), 26 deletions(-) diff --git a/templates/result.html b/templates/result.html index 4cd3fdf..450e9c4 100644 --- a/templates/result.html +++ b/templates/result.html @@ -7,12 +7,14 @@ Card image cap
Quite good! All the best for next quiz!
-
Score: {{ request.session.points }}
+
Result: {{ status }}
+
Score: {{ points }}
+ Home +{#

Percentage: 60%

#} +{#

Correct answers: 3

#} +{#

Incorrect answers: 2

#} +{#

Total questions: 5

#} -

Percentage: 60%

-

Correct answers: 3

-

Incorrect answers: 2

-

Total questions: 5

{% endblock %} diff --git a/trials/views.py b/trials/views.py index 9535f98..f613231 100644 --- a/trials/views.py +++ b/trials/views.py @@ -6,7 +6,9 @@ from rest_framework.response import Response from trials.models import Test from trials.serializers import TestSerializer from django.conf import settings -from django.http import HttpResponseRedirect +from django.http import HttpResponseRedirect, HttpResponse +from django.template import loader +from django.template.loader import render_to_string, get_template class TestModelViewSet(viewsets.ModelViewSet): @@ -14,6 +16,14 @@ class TestModelViewSet(viewsets.ModelViewSet): serializer_class = TestSerializer class TestTemplateView(TemplateView): + PASSED = "passed" + FAILED = "failed" + UNKNOWN = "unknown" + + PASSED = { + True: PASSED, + False: FAILED + } permission_classes = [] template_name = settings.BASE_DIR + f"/templates/generic_test.html" @@ -28,27 +38,31 @@ class TestTemplateView(TemplateView): context["test"] = self.get_queryset().filter(id=test_id).prefetch_related("questions__answers").first() return context + def get_score(self, test: Test, answers): + return test.get_score(answers) + + def formatted_responses(self, unformatted_json): + formatted_response = list() + for question, answer in unformatted_json.items(): + formatted_response.append( + { + "question": question, + "answer": answer + } + ) + return formatted_response + def post(self, request, *args, **kwargs): - import pdb;pdb.set_trace() - - - - - question_id = 1 - answers = [] - while True: - if request.POST.get(str(question_id)) is None: - break - ans_id = request.POST.get(str(question_id)) - answers.append({'question': question_id, 'answer': ans_id}) - question_id += 1 - points = self.get_queryset().filter(id=self.test_id).get_score(answers) - #return redirect('account') - request.session['points'] = points - url = '/tests/' + str(self.test_id) + '/result' - return HttpResponseRedirect(url) - - + test = Test.objects.get(id=kwargs.get("test_id")) + score = self.get_score(test, self.formatted_responses(request.POST)) + status = score >= test.passing_score + context = { + "status": self.PASSED.get(status, self.UNKNOWN), + "points": score + } + template_name = "result.html" + template = get_template(template_name) + return HttpResponse(template.render(context)) def testView(request): permission_classes = []