From 9db571994ff96a1b2612410ca0a9513f1eb9a1ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Bedna=C5=99=C3=ADk?= <jan.bednarik@gmail.com> Date: Mon, 29 Mar 2021 15:42:13 +0200 Subject: [PATCH] uniweb: Captcha in forms --- .isort.cfg | 2 +- majak/settings/base.py | 8 ++++++++ majak/urls.py | 2 ++ requirements/base.in | 1 + requirements/base.txt | 8 +++++--- uniweb/models.py | 7 ++++++- uniweb/templates/uniweb/uniweb_form_page.html | 9 +++++++-- 7 files changed, 30 insertions(+), 7 deletions(-) diff --git a/.isort.cfg b/.isort.cfg index 6376f49d..24b9a93d 100644 --- a/.isort.cfg +++ b/.isort.cfg @@ -4,4 +4,4 @@ line_length = 88 multi_line_output = 3 default_section = "THIRDPARTY" include_trailing_comma = true -known_third_party = arrow,django,environ,faker,ics,markdown,modelcluster,pirates,pytest,pytz,requests,sentry_sdk,snapshottest,taggit,wagtail,wagtailmetadata +known_third_party = arrow,captcha,django,environ,faker,ics,markdown,modelcluster,pirates,pytest,pytz,requests,sentry_sdk,snapshottest,taggit,wagtail,wagtailmetadata diff --git a/majak/settings/base.py b/majak/settings/base.py index 00ec6c44..262f55fa 100644 --- a/majak/settings/base.py +++ b/majak/settings/base.py @@ -52,6 +52,7 @@ INSTALLED_APPS = [ "regulace_konopi", "green_deal", "widget_tweaks", + "captcha", "wagtail.contrib.forms", "wagtail.contrib.redirects", "wagtail.contrib.modeladmin", @@ -232,6 +233,13 @@ MAJAK_ENV = env.str("MAJAK_ENV", default="prod") SETTINGS_EXPORT = ["MAJAK_ENV"] +CAPTCHA_BACKGROUND_COLOR = "#fafafa" +CAPTCHA_FOREGROUND_COLOR = "#303132" +CAPTCHA_LETTER_ROTATION = (-20, 20) +CAPTCHA_FONT_SIZE = 30 +CAPTCHA_IMAGE_SIZE = (120, 47) + + # CUSTOM APPS SETTINGS # ------------------------------------------------------------------------------ DONATE_PORTAL_REDIRECT_URL = env.str("DONATE_PORTAL_REDIRECT_URL", default="") diff --git a/majak/urls.py b/majak/urls.py index b2aa7c7c..44cf8412 100644 --- a/majak/urls.py +++ b/majak/urls.py @@ -1,3 +1,4 @@ +import captcha.urls from django.conf import settings from django.conf.urls import include, url from django.contrib import admin @@ -13,6 +14,7 @@ urlpatterns = [ url(r"^admin/", include(wagtailadmin_urls)), url(r"^documents/", include(wagtaildocs_urls)), url(r"^search/$", search_views.search, name="search"), + url(r"^captcha/", include(captcha.urls)), ] + pirates_urlpatterns diff --git a/requirements/base.in b/requirements/base.in index 2c9d1c31..76b21d69 100644 --- a/requirements/base.in +++ b/requirements/base.in @@ -5,6 +5,7 @@ django-extensions django-redis django-settings-export django-widget-tweaks +django-simple-captcha psycopg2-binary pirates<=0.6 whitenoise diff --git a/requirements/base.txt b/requirements/base.txt index 8a1aec03..06638dde 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -16,12 +16,14 @@ django-environ==0.4.5 # via -r base.in django-extensions==3.1.1 # via -r base.in django-filter==2.4.0 # via wagtail django-modelcluster==5.1 # via wagtail +django-ranged-response==0.2.0 # via django-simple-captcha django-redis==4.12.1 # via -r base.in django-settings-export==1.2.1 # via -r base.in +django-simple-captcha==0.5.14 # via -r base.in django-taggit==1.3.0 # via wagtail django-treebeard==4.5.1 # via wagtail django-widget-tweaks==1.4.8 # via -r base.in -django==3.1.7 # via django-filter, django-redis, django-settings-export, django-taggit, django-treebeard, djangorestframework, mozilla-django-oidc, wagtail +django==3.1.7 # via django-filter, django-ranged-response, django-redis, django-settings-export, django-simple-captcha, django-taggit, django-treebeard, djangorestframework, mozilla-django-oidc, wagtail djangorestframework==3.12.4 # via wagtail draftjs-exporter==2.1.7 # via wagtail et-xmlfile==1.0.1 # via openpyxl @@ -35,7 +37,7 @@ mozilla-django-oidc==1.2.4 # via pirates numpy==1.20.2 # via opencv-python opencv-python==4.5.1.48 # via -r base.in openpyxl==3.0.7 # via tablib -pillow==8.1.2 # via wagtail +pillow==8.1.2 # via django-simple-captcha, wagtail pirates==0.5.0 # via -r base.in psycopg2-binary==2.8.6 # via -r base.in pycparser==2.20 # via cffi @@ -45,7 +47,7 @@ pytz==2021.1 # via django, django-modelcluster, l18n redis==3.5.3 # via django-redis requests==2.25.1 # via -r base.in, mozilla-django-oidc, wagtail sentry-sdk==1.0.0 # via -r base.in -six==1.15.0 # via html5lib, ics, l18n, mozilla-django-oidc, pyopenssl, python-dateutil +six==1.15.0 # via django-simple-captcha, html5lib, ics, l18n, mozilla-django-oidc, pyopenssl, python-dateutil soupsieve==2.2.1 # via beautifulsoup4 sqlparse==0.4.1 # via django tablib[xls,xlsx]==3.0.0 # via wagtail diff --git a/uniweb/models.py b/uniweb/models.py index b1370705..c3cd4f88 100644 --- a/uniweb/models.py +++ b/uniweb/models.py @@ -1,3 +1,4 @@ +from captcha.fields import CaptchaField from django import forms from django.core.paginator import Paginator from django.db import models @@ -489,7 +490,6 @@ class UniwebFormPage(AbstractForm, SubpageMixin, MetadataPageMixin): ### PANELS content_panels = AbstractForm.content_panels + [ - FormSubmissionsPanel(), StreamFieldPanel("content_before"), InlinePanel("form_fields", label="formulář"), StreamFieldPanel("content_after"), @@ -534,3 +534,8 @@ class UniwebFormPage(AbstractForm, SubpageMixin, MetadataPageMixin): class Meta: verbose_name = "Formulářová stránka" + + def get_form_class(self): + form = super().get_form_class() + form.base_fields["captcha"] = CaptchaField(label="opište písmena z obrázku") + return form diff --git a/uniweb/templates/uniweb/uniweb_form_page.html b/uniweb/templates/uniweb/uniweb_form_page.html index a1b8c094..84878524 100644 --- a/uniweb/templates/uniweb/uniweb_form_page.html +++ b/uniweb/templates/uniweb/uniweb_form_page.html @@ -58,8 +58,13 @@ <label class="form-field__label" for="{{ field.id_for_label }}">{{ field.label }}</label> </div> </div> + {% elif field.widget_type == "captchatext" %} + <label class="form-field__label" for="{{ field.id_for_label }}">{{ field.label }}</label> + <div class="form-field__wrapper form-field__wrapper--shadowed w-1/2"> + {{ field|add_class:"text-input form-field__control" }} + </div> {% else %} - <label class="form-field__label" for="{{ field.id_for_label }}">{{ field.label }} ({{ field.widget_type }})</label> + <label class="form-field__label" for="{{ field.id_for_label }}">{{ field.label }}</label> <div class="form-field__wrapper form-field__wrapper--shadowed"> {{ field|add_class:"text-input form-field__control" }} </div> @@ -77,7 +82,7 @@ {% endfor %} </div> - <button class="btn text-lg mt-6 mb-4 btn--black-100"> + <button class="btn text-lg mt-6 mb-4 btn--black-100 btn--hoveractive"> <div class="btn__body ">odeslat</div> </button> </form> -- GitLab