2016-01-06 61 views
0

我是Django的新手,并且正在关注如何构建注册视图的教程。我做了完全一样的,但我的表单不通过form.is_valid()。为什么我的Django注册表没有通过is_valid()

这里是我做过什么:

forms.py

from django import forms 
from django.contrib.auth.models import User 
from django.contrib.auth.forms import UserCreationForm 

class MyRegistrationForm(UserCreationForm): 
    email = forms.EmailField(required=True) 

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

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

    if commit: 
     user.save() 
    return user 

views.py

def register_user(request): 
    if request.method == 'POST': 
     form = MyRegistrationForm(request.POST) 
     if form.is_valid(): 
      user = form.save() 
     return HttpResponseRedirect('/accounts/register_success') 

    form = MyRegistrationForm() 
    return render(request, 'register.html', {'form':form}) 

def register_success(request): 
    return render(request, 'register_success.html') 

register.html

{% extends "base.html" %} 

{% block content %} 

<h2>Register</h2> 
<form action="/accounts/register/" method="post">{% csrf_token %} 
{{ form }} 

<input type="submit" value="Register" /> 

</form> 

{% endblock %} 

当我试图在网页上注册新用户时,他们都没有通过。即使当我使用用户名:testuser电子邮件:[email protected]密码:testuser123,它失败了。那么,什么是错的?

提前致谢!

+0

尝试在视图方法'打印form.errors',看看有什么说。 –

+0

@ShangWang哦,谢谢。有用。似乎问题是密码与用户名太相似。 –

+0

很高兴你找到答案。但是,如果没有将实际的验证错误显示回模板,则您的项目不完整。查看下面其他人的答案以撰写完整的视图。 –

回答

0

你应该遵循正确的视图模式。将行form = MyRegistrationForm()放入其他块中,然后页面本身会告诉您为什么表单无效。