Форма регистрации Django и уникальная форма регистрации по электронной почте - PullRequest
0 голосов
/ 18 января 2012

В настоящее время я использую django-registration v0.8a и django-recaptcha для моей регистрационной части. Все работает нормально с отображением поля recaptcha, за исключением того, что я не могу заставить RegistrationFormUniqueEmail работать. Вот некоторые подробности.

Я убедился, что мой captcha \ 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)"))

Т.е. я меняю одну из меток на другую фразу, разве это не должно отражаться?

Спасибо за просмотр!

1 Ответ

0 голосов
/ 31 августа 2012

Решением, которое я использую, является создание формы с использованием 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}),
    ....
...