0

我创建注册表:

#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 次时间)。

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

4

2 回答 2

2

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

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

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

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

于 2013-01-12T00:40:35.937 回答
0

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

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/'

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

于 2013-01-12T10:06:08.937 回答