2009-10-06 15 views
7

मैं निम्नलिखित django snippetDjango रूपों जादूगर और recaptcha

settings.py 

    RECAPTCHA_PUBLIC_KEY = '<your public key>' 
    RECAPTCHA_PRIVATE_KEY = '<your private key>' 


#widgets.py 

    from django import forms 
    from django.utils.safestring import mark_safe 
    from django.conf import settings 
    from recaptcha import captcha 

    class ReCaptcha(forms.widgets.Widget): 
    recaptcha_challenge_name = 'recaptcha_challenge_field' 
    recaptcha_response_name = 'recaptcha_response_field' 

    def render(self, name, value, attrs=None): 
     return mark_safe(u'%s' % captcha.displayhtml(settings.RECAPTCHA_PUBLIC_KEY)) 

    def value_from_datadict(self, data, files, name): 
     return [data.get(self.recaptcha_challenge_name, None), 
     data.get(self.recaptcha_response_name, None)] 


#fields.py 

    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 marcofucci_utils.widgets import ReCaptcha 
    from recaptcha 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] 


#forms.py 

    class RegistrationForm(forms.Form): 
    ... 
    recaptcha = marcofucci_fields.ReCaptchaField() 
    ... 

का उपयोग कर एक recaptcha एकीकरण किया लेकिन मैं रूपों Django रूपों विज़ार्ड में परिभाषित किया गया है और यह मैदान पर साफ विधि दो बार कहता है, यहां तक ​​कि अगर कैप्चा अंतिम रूप में शामिल है।

निम्नलिखित में के रूप में:

from registration.forms import RegistrationWizard,RegistrationForm,ProfileForm 

    url(r'^register/$', 
     RegistrationWizard([RegistrationForm,ProfileForm]), 
     name='register_wizard'), 

मैं इस स्थिति को कैसे दरकिनार करते। आखिरी फॉर्म पर दो बार साफ करने की आवश्यकता क्या है?

+4

मैं इस – Evgeny

+3

एक ही समस्या यहाँ पोस्ट करने के लिए एक ही सटीक समस्या धन्यवाद किया था। – kjagiello

+0

यह देखकर कि यह एक साल पुराना है ... आपको कभी समाधान मिल रहा है? हे .. –

उत्तर

2

यदि कोई फॉर्म बाध्य है, तो यह रेंडरिंग के दौरान हमेशा कॉल करेगा (भले ही आप form.is_valid को कॉल न करें)।

0

आप इस बजाय प्रयोग करने पर विचार करना चाह सकते हैं: django snippet 1644

संबंधित मुद्दे