diff options
Diffstat (limited to 'recaptcha/fields.py')
-rw-r--r-- | recaptcha/fields.py | 27 |
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] |