diff --git a/README.txt b/README.txt index 18b21ad..5af2228 100644 --- a/README.txt +++ b/README.txt @@ -1,2 +1,4 @@ -This integration app implements a recaptcha field for Google reCaptcha v2 -with explicit rendering and multiple recaptcha support. \ No newline at end of file +This integration app implements a reCAPTCHA field for Google reCAPTCHA v2 +with explicit rendering and multiple reCAPTCHA support. + +It supports also the invisible reCAPTCHA with the automatic render mode. \ No newline at end of file diff --git a/samples/invisible_recaptcha.html b/samples/invisible_recaptcha.html new file mode 100644 index 0000000..d3528ee --- /dev/null +++ b/samples/invisible_recaptcha.html @@ -0,0 +1,28 @@ +{% load recaptcha2 %} + + + {% recaptcha_init %} + + +
+ {% csrf_token %} + {{ form }} + {% recaptcha_invisible_button submit_label='Submit' %} +
+
+ {% csrf_token %} + {{ form }} + {% recaptcha_invisible_button submit_label='Submit' form_id='myform2' %} +
+
+ {% csrf_token %} + {{ form }} + {% recaptcha_invisible_button submit_label='Submit' custom_callback='mycallback' %} + +
+ + \ No newline at end of file diff --git a/snowpenguin/django/recaptcha2/templates/snowpenguin/recaptcha/recaptcha_invisible_automatic.html b/snowpenguin/django/recaptcha2/templates/snowpenguin/recaptcha/recaptcha_invisible_button.html similarity index 52% rename from snowpenguin/django/recaptcha2/templates/snowpenguin/recaptcha/recaptcha_invisible_automatic.html rename to snowpenguin/django/recaptcha2/templates/snowpenguin/recaptcha/recaptcha_invisible_button.html index 0c64886..38b0c00 100644 --- a/snowpenguin/django/recaptcha2/templates/snowpenguin/recaptcha/recaptcha_invisible_automatic.html +++ b/snowpenguin/django/recaptcha2/templates/snowpenguin/recaptcha/recaptcha_invisible_button.html @@ -1,12 +1,10 @@ - - \ No newline at end of file +{% endif %} \ No newline at end of file diff --git a/snowpenguin/django/recaptcha2/templatetags/recaptcha2.py b/snowpenguin/django/recaptcha2/templatetags/recaptcha2.py index e05a880..76d7eb9 100644 --- a/snowpenguin/django/recaptcha2/templatetags/recaptcha2.py +++ b/snowpenguin/django/recaptcha2/templatetags/recaptcha2.py @@ -1,5 +1,8 @@ +from random import randint + from django import template from django.conf import settings +from django.utils.translation import ugettext_lazy as _ register = template.Library() @@ -22,3 +25,18 @@ def recaptcha_explicit_init(language=None): @register.inclusion_tag('snowpenguin/recaptcha/recaptcha_explicit_support.html') def recaptcha_explicit_support(): return {} + + +@register.inclusion_tag('snowpenguin/recaptcha/recaptcha_invisible_button.html') +def recaptcha_invisible_button(public_key=None, submit_label=None, extra_css_classes=None, form_id=None, + custom_callback=None): + generated_id = '%s' % randint(10000, 99999) + + return { + 'generated_id': generated_id, + 'public_key': public_key or settings.RECAPTCHA_PUBLIC_KEY, + 'form_id': form_id, + 'submit_label': submit_label or _('Submit'), + 'extra_css_classes': extra_css_classes, + 'custom_callback': custom_callback + } diff --git a/snowpenguin/django/recaptcha2/widgets.py b/snowpenguin/django/recaptcha2/widgets.py index d060bfc..3941f37 100644 --- a/snowpenguin/django/recaptcha2/widgets.py +++ b/snowpenguin/django/recaptcha2/widgets.py @@ -1,10 +1,9 @@ from random import randint from django.conf import settings -from django.forms.widgets import Widget +from django.forms.widgets import Widget, Input from django.template.loader import render_to_string from django.utils.safestring import mark_safe -from django.utils.translation import gettext as _ class ReCaptchaWidget(Widget): @@ -49,30 +48,11 @@ def value_from_datadict(self, data, files, name): return [data.get('g-recaptcha-response', None)] -class ReCaptchaInvisibleWidget(Widget): - def __init__(self, public_key=None, submit_label=_('Submit'), extra_css_classes=None, form_id=None, attrs={}, - *args, **kwargs): - super(ReCaptchaInvisibleWidget, self).__init__(*args, **kwargs) - self.attrs = attrs - self._public_key = public_key - self.submit_label = submit_label - self.extra_css_classes = extra_css_classes - self.form_id = form_id - - def render(self, name, value, attrs=None, *args, **kwargs): - template = 'snowpenguin/recaptcha/recaptcha_invisible_automatic.html' - - generated_id = '%s' % randint(10000, 99999) +class ReCaptchaInvisibleWidget(Input): + input_type = 'hidden' - return mark_safe( - render_to_string(template, { - 'generated_id': generated_id, - 'public_key': self._public_key or settings.RECAPTCHA_PUBLIC_KEY, - 'form_id': self.form_id, - 'submit_label': self.submit_label, - 'extra_css_classes': self.extra_css_classes - }) - ) + def render(self, name, value, attrs=None, renderer=None): + return '' def value_from_datadict(self, data, files, name): return [data.get('g-recaptcha-response', None)] diff --git a/tox.ini b/tox.ini index ff128f7..e00d062 100644 --- a/tox.ini +++ b/tox.ini @@ -11,7 +11,9 @@ basepython = py35: python3.5 py36: python3.6 py37: python3.7 -commands=python setup.py test +commands= + pip install git+git://github.com/kbytesys/django-setuptest.git@feature/pep8_config + python setup.py test deps = 1.8: Django>=1.8,<1.9 1.9: Django>=1.9,<1.10