2012-01-18 3 views
0

현재 등록 할 때 django-registration v0.8a 및 django-recaptcha를 사용하고 있습니다. recaptcha 필드가 나타나면 RegistrationFormUniqueEmail을 작동시킬 수 없다는 점을 제외하면 모든 것이 잘 작동합니다. 여기에 몇 가지 세부 사항이 있습니다.장고 등록 양식 및 등록 고유 이메일 양식

내 보안 문자 \의 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'), 

내가 알아챈 한 가지 이상한 행동은 양식의 레이블을 변경하려고 할 때 변경 사항이 반영되지 않는다는 것입니다. 아마도 이것은 제가 간과 한 것과 같은 문제의 일부입니까?

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', 당신은'RegistrationFormUniqueEmail''에 form_class' 세트 당신은'RegistrationForm'을 edititng 있습니다. 같은 형식이 아니어야합니까? :-) – DrTyrsa

+0

@DrTyrsa 안녕하세요 :) 양식 작동 방식에 대한 오해가있는 경우 용서해주세요. 'RegistrationFormCaptcha'는 'RegistrationForm'의 하위 클래스이므로 'RegistrationForm'을 변경하면 다른 모든 양식에 영향을 미치지 않아야합니까? 이 경우 form_class를 'RegistrationFormUniqueEmail'으로 설정하면 어떤 효과가 있습니까? a) captcha 필드가 사라져야합니다. b) 고유 한 전자 메일 제약이 적용될 것입니다. c) 다른 것입니까? 감사! – nightscent

답변

0

내가 사용하는 솔루션은 RegistrationFormCaptcha 및 RegistrationFormUniqueEmail을 사용하여 양식을 만들고 url의 captcha 백엔드와 함께 사용하는 것입니다.

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