Django注册,强制独特的电子邮件

时间:2010-01-25 10:16:24

标签: python django

我可以强制用户在django-registration中创建唯一的电子邮件地址吗?

7 个答案:

答案 0 :(得分:16)

对于更高版本的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'),
)

答案 1 :(得分:13)

从rych的回答中,我测试了以下运行正常 - 它只使用urls.py,你不需要写另一个cusotmer表单。

from registration.forms import RegistrationFormUniqueEmail

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

答案 2 :(得分:5)

django-registration源代码中包含多种形式 - 一种是RegistrationFormUniqueEmail,可能对您有帮助......


P.S。您可以通过更改默认后端或通过实现自定义后端来调整要使用的表单,您可以在其中返回相应的表单类,请参阅:http://bitbucket.org/ubernostrum/django-registration/src/073835a4269f/registration/backends/default/init.py#cl-118

答案 3 :(得分:4)

正如miku所指出的那样,你应该只使用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')),

[请原谅额外的答案,因为这属于对miku正确答案的评论;我没有评论的特权,但这个提示可能至少可以节省15分钟的人数,所以希望值得强制失败]

答案 4 :(得分:3)

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

答案 5 :(得分:2)

从您的用户模型创建注册表单就足够了。如果电子邮件地址在那里被定义为唯一,则表单将在提交重复地址时输出错误。

查看here了解详情。

正如Dominic所指出的那样,你无法使用内置的用户个人资料进行此操作。您必须按照here所述创建自己的用户配置文件来扩展它,并使其包含唯一的电子邮件地址。

答案 6 :(得分:1)

对于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'))

]