【问题标题】:Django-registration, force unique e-mailDjango-registration,强制唯一的电子邮件
【发布时间】:2010-01-25 10:16:23
【问题描述】:

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

【问题讨论】:

  • 在“POST”视图中 if User.objects.filter(username=username).exists(): return HttpResponseRedirect(reverse('accounts:unique')) 其中 accounts:unique 在我的情况下是发送给用户的电子邮件不是唯一的消息

标签: python django


【解决方案1】:

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

【讨论】:

  • registration.backends.default.views 给你 NotImplementedError。在运行时激活代码将失败。您需要的是registration.backends.hmac.views 或registration.backends.model_activation.views
【解决方案2】:

根据 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'),

【讨论】:

  • 我有这个设置。它不工作。我该如何解决为什么?我在 site-packages/registration/forms.py class RegistrationFormUniqueEmail(RegistrationForm): 的第一行(即第 88 行)之后有断点,以确保它运行并且它确实运行,因为控制台返回:RuntimeWarning) > /Users/merty/.virtualenvs/ssc/lib/python2.7/site-packages/registration/forms.py(92)RegistrationFormUniqueEmail() 91 ---> 92 def clean_email(self): 93 """ ipdb> 然后我将中断放在有条件的验证,它没有像那部分没有运行一样拿起它?!
【解决方案3】:

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


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

【讨论】:

  • 我必须有权访问 django-registration 文件吗?我在注册定义中更改了form_class,但什么也没发生。我无权访问已安装的 django-registration 文件。仅适用于我的应用文件夹中的 django-registration 文件实例。
  • 我不确定您的设置,但我曾经将最近的 django-registration 版本下载到我的项目目录中,因此我可以在需要时更改文件(并且我可以需要时更新应用程序)。同样在我的情况下,上述方法也很有效......
【解决方案4】:
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))

【讨论】:

  • 在forms.py中导入更整洁,+1。
【解决方案5】:

正如 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 分钟的时间,所以希望值得强迫的失礼]

【讨论】:

    【解决方案6】:

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

    查看here了解详情。

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

    【讨论】:

    • 当模型是内置模型时,这没有多大帮助...docs.djangoproject.com/en/dev/topics/auth/#fields
    • 但我想引起反应,例如当用户尝试使用正在使用的 nick 时 - 他收到使用 nick 的 AJAX 错误 - 我想对电子邮件做同样的事情。
    【解决方案7】:

    对于 django-registration-redux 1.4 中的唯一电子邮件地址。

    在 url.py 中添加以下内容

    从 registration.forms 导入 RegistrationFormUniqueEmail
    
    从registration.backends.default.views导入RegistrationView
    
    网址模式 = [
     url(r'^accounts/register/$',RegistrationView.as_view(form_class=RegistrationFormUniqueEmail),
            name='registration_register'),
    
     url(r'^accounts/', 包括('registration.backends.default.urls'))
    
    ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-15
      • 2017-05-17
      • 2019-04-26
      • 2011-02-23
      • 2018-05-03
      相关资源
      最近更新 更多