diff --git a/personalWebpage/webpage/forms.py b/personalWebpage/webpage/forms.py new file mode 100644 index 0000000..215ebda --- /dev/null +++ b/personalWebpage/webpage/forms.py @@ -0,0 +1,15 @@ +from django import forms +from django.core.exceptions import ValidationError +from django.utils.translation import gettext_lazy as txt + +class SignbookForm(forms.Form): + name = forms.CharField(label="Name") + website = forms.CharField(label="Website", required=False) + email = forms.EmailField(label="Email", required=False) + comment = forms.CharField(label="Comment", required=False) + capcha = forms.CharField(label="Tell me that you love 'me'") + + def validate_capcha(self): + if self.cleaned_data["capcha"].lower() != "i love me": + raise ValidationError(txt('Invalid captcha')) + return self \ No newline at end of file diff --git a/personalWebpage/webpage/models.py b/personalWebpage/webpage/models.py index 73406d4..56900ac 100644 --- a/personalWebpage/webpage/models.py +++ b/personalWebpage/webpage/models.py @@ -1,6 +1,4 @@ from django.db import models -from django.utils import timezone -from django.contrib import admin # Create your models here. class Booksigner(models.Model): diff --git a/personalWebpage/webpage/templates/signbook.html b/personalWebpage/webpage/templates/signbook.html index 0269fc1..13b05a4 100755 --- a/personalWebpage/webpage/templates/signbook.html +++ b/personalWebpage/webpage/templates/signbook.html @@ -41,28 +41,11 @@

-
- Name: - - * -
-
- Website: - -
-
- E-mail: - -
-
- Comment: - -
-

- Capcha(Say that you love "me"): - - * -

+ {% csrf_token %} + {% if error_message %}

{{ error_message }}

{% endif %} + + {{ form.as_table }} +

diff --git a/personalWebpage/webpage/views.py b/personalWebpage/webpage/views.py index 3b07d9b..3f806a1 100644 --- a/personalWebpage/webpage/views.py +++ b/personalWebpage/webpage/views.py @@ -1,8 +1,9 @@ -from django.http import HttpResponseNotFound +from django.http import HttpResponseNotFound, HttpResponseRedirect from django.shortcuts import render import os, random from .models import Booksigner +from .forms import SignbookForm def image_dict_from_name_list(name_list: list[str]): dict_list = [] @@ -45,9 +46,52 @@ def about(request): def signbook(request): signer_list = Booksigner.objects.all() - - context = { + if request.method == 'POST': + form = SignbookForm(request.POST) + if form.is_valid(): + newsigner = {} + newsigner["name"] = form.cleaned_data['name'] + newsigner["website"] = form.cleaned_data['website'] + newsigner["email"] = form.cleaned_data['email'] + newsigner["comment"] = form.cleaned_data['comment'] + host = request.META["SERVER_NAME"] + print(host) + match host: + case "localhost": + newsigner["hosting"] = "Local" + case r".*\.fai.st": + newsigner["hosting"] = "fai" + case _: + newsigner["hosting"] = "???" + + signer_list = Booksigner.objects.all() + if newsigner: + Booksigner.objects.create( + name=newsigner["name"], + email=newsigner["email"], + website=newsigner["website"], + comment=newsigner["comment"], + hosting=newsigner["hosting"], + ) + context = { + "title": "THE GUESTBOOK", + "signer_list": signer_list + } + return render(request, "signbook.html", context) + context = { "title": "THE GUESTBOOK", - "signer_list": signer_list + "signer_list": signer_list, + "error_message": "You didn't input a required input.", } - return render(request, "signbook.html", context) \ No newline at end of file + return render( + request, + "signbook.html", + context + ) + else: + context = { + "title": "THE GUESTBOOK", + "signer_list": signer_list, + "form": SignbookForm() + } + return render(request, "signbook.html", context)