import random from django.http import JsonResponse from django.shortcuts import render from django.views import View from django.views.generic import ListView, TemplateView from .forms import ContactForm from .models import ContactSubmission, FAQEntry class HomeView(TemplateView): template_name = "pages/home.html" class AboutView(TemplateView): template_name = "pages/about.html" class FAQView(ListView): model = FAQEntry template_name = "pages/faq.html" context_object_name = "faq_entries" queryset = FAQEntry.objects.filter(is_active=True) class ContactView(View): template_name = "pages/contact.html" def _new_captcha(self, request): a, b = random.randint(1, 9), random.randint(1, 9) request.session["captcha_answer"] = a + b return f"{a} + {b}" def get(self, request, *args, **kwargs): return render( request, self.template_name, {"form": ContactForm(), "captcha_question": self._new_captcha(request)}, ) def post(self, request, *args, **kwargs): form = ContactForm(request.POST) expected = request.session.get("captcha_answer") captcha_question = self._new_captcha(request) captcha_ok = False try: captcha_ok = int(request.POST.get("captcha_answer", "")) == expected except (ValueError, TypeError): pass if form.is_valid() and captcha_ok: form.save() return JsonResponse({"success": True}) errors: dict = {} if not captcha_ok: errors["captcha"] = ["Incorrect answer — please try again."] errors.update( {field: [str(e) for e in errs] for field, errs in form.errors.items()} ) return JsonResponse( {"success": False, "errors": errors, "captcha_question": captcha_question}, status=400, )