【问题标题】:Django - how to add email to required thingsDjango - 如何将电子邮件添加到所需的东西
【发布时间】:2012-12-26 15:06:31
【问题描述】:

我创建注册表:

#urls.py
from django.conf.urls import patterns, url
from django.views.generic import TemplateView
from account.views import Register

urlpatterns = patterns('',
    url(r'^register/$', Register.as_view(template_name='account/register.html')),
)

#views.py
from django.views.generic import CreateView
from django.contrib.auth.models import User

class Register(CreateView):
    model = User
    success_url = '/account/'

我有一个问题:如何添加该电子邮件(现在我必须输入用户名、密码和 2 次时间)。

@编辑
以及如何“修复”密码?当我创建用户(以这种形式)然后转到管理面板时,在用户中我看到“无效的密码格式或未知的哈希算法。”。我该如何修复它?

【问题讨论】:

  • 我建议您使用已经构建的身份验证和注册应用程序,例如django-allauth, userena, django-registration.
  • 这些包为你处理了很多东西。并且可以根据需要轻松定制。

标签: django django-forms django-views


【解决方案1】:

不需要电子邮件的原因是因为您使用的是ModelForm,它从底层User 模型中获取了很多线索。具体来说,模型的email 字段中不存在required=True 属性。

一种解决方案是创建您自己的具有必要属性的表单,可能通过使用 ModelForm 并添加必填的电子邮件字段。

另一种解决方案,可能是更好的解决方案,是使用 Aamir Adnan 在 cmets 中针对您的问题提到的 django-registration 之类的东西。它会为您简化很多事情。

就您的repair password 而言,您不能像使用CreateView 那样将密码设置为原始字符串值。要设置密码,您必须致电user.set_password(raw_string),它将为您处理散列和加盐。看看内置的 UserCreationForm 是如何工作的,如果您决定自己构建表单而不是使用库(您不应该),请尝试模仿它。

【讨论】:

    【解决方案2】:

    要解决这两个问题,您可以使用如下形式:

    class UserCreationForm(forms.ModelForm):    
        class Meta:
            model = User
    
        def __init__(self, *args, **kwargs):
            super(UserCreationForm).__init__(*args, **kwargs)
            self.fields['email'].required = True
    
        def save(self, commit=True):
            user = super(UserCreationForm, self).save(commit=False)
            user.set_password(self.cleaned_data["password"])
            if commit:
                user.save()
            return user
    
    class Register(CreateView):
        model = User
        form_class = UserCreationForm
        success_url = '/account/'
    

    但是会有其他问题,比如用户名重复。

    【讨论】:

      猜你喜欢
      • 2015-08-28
      • 2011-07-08
      • 2011-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-18
      相关资源
      最近更新 更多