2012-01-18 19 views
0

私は現在、登録部分にdjango-registration v0.8aとdjango-recaptchaを使用しています。私がRegistrationFormUniqueEmailを動作させることができないことを除いて、すべてがrecaptchaフィールドが表示されてうまく動作しています。ここにいくつかの詳細があります。Django登録フォームと登録独自の電子メールフォーム

私は私のCAPTCHAの\ forms.pyが実際に正しいフォームからサブクラス化されることを保証している:

from registration.forms import RegistrationFormUniqueEmail 

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

は私もコールを処理レジスタビューに関連付けられているすべてのURLにform_classキーを配置しています、

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

私が気づいた1つの奇妙な動作は、フォームのラベルを変更しようとすると、変更が反映されないことです。おそらくこれは私が何か見落としたかもしれない同じ問題の一部ですか?

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)")) 

つまり、ラベルの1つを別のフレーズに変更しても、それを反映させるべきではありませんか?

ありがとうございました!

+0

あなたはRegistrationFormUniqueEmail' 'に' form_class'を設定し、 'RegistrationForm'をedititngされ、' RegistrationFormCaptcha'を使用します。それは同じ形式ではありませんか? :-) – DrTyrsa

+0

@DrTyrsaこんにちは:)私はフォームの仕組みの誤解がある場合、私を許してください。 'RegistrationFormCaptcha'は 'RegistrationForm'のサブクラスなので、 'RegistrationForm'の変更は他のすべてのフォームに影響しませんか?この場合、form_classを 'RegistrationFormUniqueEmail'に設定するとどんな効果がありますか?それは)a)キャプチャのフィールドが消えるべきかb)一意の電子メールの制約が強制されるc)何か他のものはありますか?ありがとう! – nightscent

答えて

0

私が使用しているソリューションは、RegistrationFormCaptchaとRegistrationFormUniqueEmailを使用してフォームを作成し、それをurlのcaptchaバックエンドとともに使用することです。 forms.py

custom_registration/

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}), 
    ....