Django - 自定义注册表单(错误,唯一电子邮件和管理员)

时间:2014-03-01 13:58:13

标签: python django forms registration

首先,我是使用Django进行编程的新手。这就是我所拥有的:

register.html 模板中的<form>

<form method='POST' action='/accounts/register/'>
   {% csrf_token %}
   {% for field in form %}
       {{ field.label_tag }}{{ field }} {{field.help_text}} {{field.errors}{}
   <br/>
   {% endfor %}
   <input type='submit' value='Register' />
</form>

这是在我的 forms.py

class MyRegistrationForm(UserCreationForm):
email = forms.EmailField(required=True)
first_name = forms.CharField(required = True)
last_name = forms.CharField(required = True)
password1 = forms.RegexField(widget=forms.PasswordInput,
                            regex = r'[\w+]{8,}',
                            label = 'New password',
                            help_text = "Must be strong!",
                            error_messages = {'required' : "ASDASDA",
                                              'invalid' : "ZZZZZ"}
                            )
password2 = forms.RegexField(widget=forms.PasswordInput,
                            regex = r'[\w+]{8,}',
                            label = 'Re-enter password',
                            )

class Meta:
    model = User
    fields = ('last_name', 'first_name', 'username', 'email', 'password1', 'password2')

def save(self, commit = True):
    user = super(MyRegistrationForm, self).save(commit = False)
    user.email = self.cleaned_data['email']
    user.first_name = self.cleaned_data['first_name']
    user.last_name = self.cleaned_data['last_name']

    if commit:
        user.save()

    return user

这是在我的 views.py

def User_Register_View(request):
if request.method == 'POST':
    form = MyRegistrationForm(request.POST)
    if form.is_valid():
        form.save()
        register_success = "Account successfuly created!"
        return render(request,'index.html', locals())

args = {}
args.update(csrf(request))
args['form'] = MyRegistrationForm()

return render(request,'accounts/register.html',args)

我的问题如下:

  1. {{field.errors}}无效。没有错误打印。如果我将表单的所有字段都清空,并单击“注册”,则不会显示错误。

  2. 如果我在此论坛中添加另一个字段,“性别”作为CharField,是否会在我的数据库中为性别创建一个列? (我正在使用默认的sqlite3)

  3. 是否有一种简单的方法可以修改我的代码并使“用户”字段成为可选字段,而是将“电子邮件”字段设置为唯一且必需?

  4. 在我的代码所处的状态下,我在哪里可以检查数据库中我的电子邮件的唯一属性?它在我的views.py中,就在form.save()之前?

  5. 谢谢。如果您有任何问题,请告诉我

1 个答案:

答案 0 :(得分:1)

def User_Register_View(request):

    if request.method == 'POST':
        form = MyRegistrationForm(request.POST)
        if form.is_valid():
          form.save()
          register_success = "Account successfuly created!"
          return render(request,'index.html', locals())
    else:
        form = MyRegistrationForm() # An unbound form

    args = {}
    args['form'] = form

    return render(request,'accounts/register.html',args)
  1. {{field.errors}}现在显示,因为如果验证失败,您不会返回经过验证的表单实例。您总是返回MyRegistrationForm的新实例。见上面的例子。

  2. 向表单添加字段不会影响您的数据库,因为只有模型映射到数据库表

  3. &安培; 4.您需要自定义用户模型,请参阅here,了解如何操作