summaryrefslogtreecommitdiff
path: root/recaptcha/fields.py
diff options
context:
space:
mode:
Diffstat (limited to 'recaptcha/fields.py')
-rw-r--r--recaptcha/fields.py27
1 files changed, 27 insertions, 0 deletions
diff --git a/recaptcha/fields.py b/recaptcha/fields.py
new file mode 100644
index 0000000..ce79a6d
--- /dev/null
+++ b/recaptcha/fields.py
@@ -0,0 +1,27 @@
+from django.conf import settings
+from django import forms
+from django.utils.encoding import smart_unicode
+from django.utils.translation import ugettext_lazy as _
+
+from recaptcha.widgets import ReCaptcha
+from recaptcha.client import captcha
+
+class ReCaptchaField(forms.CharField):
+ default_error_messages = {
+ 'captcha_invalid': _(u'Invalid captcha')
+ }
+
+ def __init__(self, *args, **kwargs):
+ self.widget = ReCaptcha
+ self.required = True
+ super(ReCaptchaField, self).__init__(*args, **kwargs)
+
+ def clean(self, values):
+ super(ReCaptchaField, self).clean(values[1])
+ recaptcha_challenge_value = smart_unicode(values[0])
+ recaptcha_response_value = smart_unicode(values[1])
+ check_captcha = captcha.submit(recaptcha_challenge_value,
+ recaptcha_response_value, settings.RECAPTCHA_PRIVATE_KEY, {})
+ if not check_captcha.is_valid:
+ raise forms.util.ValidationError(self.error_messages['captcha_invalid'])
+ return values[0]