2012-01-18 148 views
0

我目前使用django注册v0.8a和django-recaptcha为我的注册部分。除了我无法使RegistrationFormUniqueEmail正常工作以外,一切正常,显示的是recaptcha字段。以下是一些细节。Django注册表和注册独特的电子邮件形式

我已确保我的验证码\ forms.py确实从正确的形式继承:

from registration.forms import RegistrationFormUniqueEmail 

class RegistrationFormCaptcha(RegistrationFormUniqueEmail): 
captcha = ReCaptchaField(attrs={'theme': 'white'}) 

我也放在form_class键与处理呼叫寄存器视图相关联的所有URL,例如:

url(r'^register/$', 
      register, 
      { 'form_class': RegistrationFormUniqueEmail, 
       'backend': 'registration.backends.default.DefaultBackend' }, 
      name='registration_register'), 

我注意到的一个奇怪的行为是,当我尝试更改我的窗体上的标签时,更改没有反映出来。也许这是同样的问题的一部分,因为我可能忽略了一些东西?

class RegistrationForm(forms.Form): 
""" 
Form for registering a new user account. 

Validates that the requested username is not already in use, and 
requires the password to be entered twice to catch typos. 

Subclasses should feel free to add any additional validation they 
need, but should avoid defining a ``save()`` method -- the actual 
saving of collected user data is delegated to the active 
registration backend. 

""" 
username = forms.RegexField(regex=r'^\w+$', 
          max_length=30, 
          widget=forms.TextInput(attrs=attrs_dict), 
          label=_("Username"), 
          error_messages={ 'invalid': _("This value must contain only letters, numbers and underscores.") }) 
email = forms.EmailField(widget=forms.TextInput(attrs=dict(attrs_dict, 
                  maxlength=75)), 
         label=_("Email address")) 
password1 = forms.CharField(widget=forms.PasswordInput(attrs=attrs_dict, render_value=False), 
          label=_("Password")) 
password2 = forms.CharField(widget=forms.PasswordInput(attrs=attrs_dict, render_value=False), 
          label=_("Password (again)")) 

即我更改标签到另一个短语之一,应该不是体现?

感谢您的收看!

+0

你想用'RegistrationFormCaptcha',可以设置'form_class'到'RegistrationFormUniqueEmail'和你edititng'RegistrationForm'。它不应该是相同的形式吗? :-) – DrTyrsa 2012-01-18 12:11:37

+0

@DrTyrsa你好:)如果我对表单工作有些误解,请原谅我。由于'RegistrationFormCaptcha'从'RegistrationForm'的子类,不应该改变'RegistrationForm'影响所有其他形式吗?在这种情况下,将form_class设置为'RegistrationFormUniqueEmail'有什么作用?它会是a)验证码字段应该消失b)唯一的电子邮件约束将被执行c)其他的东西?谢谢! – nightscent 2012-01-18 12:16:15

回答

0

我使用的解决方案是使用RegistrationFormCaptcha和RegistrationFormUniqueEmail创建一个表单,并将其用于URL中的验证码后端。

custom_registration/forms.py

from captcha.forms import RegistrationFormCaptcha 
from registration.forms import RegistrationFormUniqueEmail 


class RegistrationFormUniqueEmailRecaptcha(RegistrationFormUniqueEmail, RegistrationFormCaptcha): 
    pass 

urls.py

from custom_registration.forms import RegistrationFormUniqueEmailRecaptcha 

    ... 
    url(r'^w/accounts/register/$', 
     'registration.views.register', 
     {'backend': 'captcha.backends.default.DefaultBackend', 
     'form_class': RegistrationFormUniqueEmailRecaptcha}), 
    ....