Джанго-регистрация, форс-мажор - PullRequest
16 голосов
/ 25 января 2010

Могу ли я заставить пользователей создавать уникальные адреса электронной почты в django-регистрации?

Ответы [ 7 ]

16 голосов
/ 15 октября 2013

Для более поздних версий django_registration (которые используют представления на основе классов) вы можете сделать это:

from registration.forms import RegistrationFormUniqueEmail
from registration.backends.default.views import RegistrationView

urlpatterns = patterns('',
    url(r'^register/$',
        RegistrationView.as_view(form_class=RegistrationFormUniqueEmail),
        name='registration_register'),
)
13 голосов
/ 11 сентября 2011

из ответа rych, я проверил, что следующее работает нормально - он использует только urls.py, вам не нужно писать другую форму клиента.

from registration.forms import RegistrationFormUniqueEmail

url(r'^accounts/register/$', 'registration.views.register',
    {'form_class': RegistrationFormUniqueEmail,
     'backend': 'registration.backends.default.DefaultBackend'},       
     name='registration_register'),
5 голосов
/ 25 января 2010

django-registration имеет несколько форм, включенных в источник - одна из них RegistrationFormUniqueEmail, которая может помочь вам ...


P.S. Вы можете настроить используемую форму, изменив бэкэнд по умолчанию или внедрив пользовательский, где вы возвращаете соответствующий класс формы, см .: http://bitbucket.org/ubernostrum/django-registration/src/073835a4269f/registration/backends/default/init.py#cl-118

4 голосов
/ 10 августа 2011

Как отметил мику, вы должны просто использовать RegistrationFormUniqueEmail.

Если вы реализуете в соответствии с документацией и сообщениями об ошибках (по состоянию на середину 2011 года), вы, вероятно, в итоге получите исключение, подобное:

TypeError at /accounts/register/
register() takes at least 2 non-keyword arguments (1 given)

Ваш urlconf должен выглядеть так, чтобы правильно указать этот бэкэнд:

(r'^accounts/register/', 'registration.views.register' {'form_class':RegistrationFormUniqueEmail, 'backend':'registration.backends.default.DefaultBackend' }),
(r'^accounts/', include('registration.backends.default.urls')),

[прошу прощения за дополнительный ответ, так как он относится к комментарию к правильному ответу Мику; Я не имею права комментировать, но этот совет может сэкономить, по крайней мере, нескольким людям по 15 минут каждый, так что стоит надеяться, что насильственные действия]

3 голосов
/ 14 августа 2010
forms.py

from registration.forms import RegistrationFormUniqueEmail

class RegistroPerfilForm(RegistrationFormUniqueEmail):
    first_name= forms.CharField(required=True)
    last_name= forms.CharField(required=True)
    kind__of_user= forms.CharField(widget=forms.RadioSelect(choices=TIPO))
2 голосов
/ 25 января 2010

Достаточно создать регистрационную форму из вашей модели пользователя. Если адрес электронной почты там определен как уникальный, в форме при отправке будет выдано сообщение об ошибке для дублированных адресов.

Смотрите здесь для деталей.

Как отмечает Доминик, вы не сможете сделать это с помощью встроенного профиля пользователя. Вам придется расширить его, создав собственный профиль пользователя, как описано здесь , и сделать так, чтобы он содержал уникальный адрес электронной почты.

1 голос
/ 08 июня 2016

Для уникальных адресов электронной почты в django-registration-redux 1.4.

В url.py добавить следующий

from registration.forms import RegistrationFormUniqueEmail

from registration.backends.default.views import RegistrationView

urlpatterns = [
 url(r'^accounts/register/$',RegistrationView.as_view(form_class=RegistrationFormUniqueEmail),
        name='registration_register'),

 url(r'^accounts/', include('registration.backends.default.urls'))

]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...