Python 显示django用户创建表单错误
我使用的是django内置的用户创建表单,我对其进行了如下扩展Python 显示django用户创建表单错误,python,django,Python,Django,我使用的是django内置的用户创建表单,我对其进行了如下扩展 class RegistrationForm(UserCreationForm): email = forms.EmailField(required=True, widget=forms.TextInput(attrs={'placeholder': 'E-mail address'})) first_name = forms.CharField(required=True) last_name = for
class RegistrationForm(UserCreationForm):
email = forms.EmailField(required=True, widget=forms.TextInput(attrs={'placeholder': 'E-mail address'}))
first_name = forms.CharField(required=True)
last_name = forms.CharField(required=True)
class Meta:
model = User
fields = ('first_name', 'last_name', 'email', 'username', 'password1', 'password2')
def clean_email(self):
email = self.cleaned_data["email"]
try:
User._default_manager.get(email=email)
except User.DoesNotExist:
return email
#raise forms.ValidationError(self.error_messages['duplicate_email'])
raise forms.ValidationError('duplicate_email')
def save(self, commit=True):
user = super(RegistrationForm, self).save(commit=False)
user.email = self.cleaned_data['email']
if commit:
user.save()
return user
如您所见,我添加了电子邮件验证,以检查是否已经有用户使用该电子邮件(我不接受)。
问题是这些错误都没有显示在我的模板中,我不知道为什么。我尝试了{{form.field.errors}},甚至尝试了{{form.errors.values.[I]}},但没有任何帮助
我在auth.forms中查看类UserCreationForm,我看到它将错误传递给错误消息,但我找不到显示它们的方法
虽然所有的验证(用户名检查、密码检查、电子邮件检查)都可以正常工作,但我仍然希望在带有错误的字段上方显示错误,以便用户理解他无法创建帐户的原因
更新
视图.py
def register_user(request):
if request.method == 'POST':
form = RegistrationForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/accounts/register_success')
args = {}
args.update(csrf(request))
args['form'] = RegistrationForm()
return render_to_response('user_profile/register.html', args, context_instance=RequestContext(request))
我希望有人能帮我。
谢谢这将起作用:
def register_user(request):
args = {}
args.update(csrf(request))
if request.method == 'POST':
form = RegistrationForm(request.POST)
args['form'] = form
if form.is_valid():
form.save()
return HttpResponseRedirect('/accounts/register_success')
else:
args['form'] = RegistrationForm()
return render_to_response('user_profile/register.html', args, context_instance=RequestContext(request))
代码的问题是,您一直在向模板传递未绑定的表单实例,因此您只是在覆盖任何发生的错误请在此处查找参考资料:这将起作用:
def register_user(request):
args = {}
args.update(csrf(request))
if request.method == 'POST':
form = RegistrationForm(request.POST)
args['form'] = form
if form.is_valid():
form.save()
return HttpResponseRedirect('/accounts/register_success')
else:
args['form'] = RegistrationForm()
return render_to_response('user_profile/register.html', args, context_instance=RequestContext(request))
代码的问题是,您一直在向模板传递未绑定的表单实例,因此您只是在覆盖任何发生的错误请在此处查找参考资料:如果您正在寻找更高效的解决方案,那么您应该在views.py文件中尝试我下面的代码 您的forms.py代码将相同。但这是密码验证的泄漏
# to register auth user
class register_user(View):
template1 = "app_name/register.html" # define templates
template2 = "app_name/login.html"
def get(self, request): # get method
form = RegistrationForm()
return render(request, self.template1, locals())
def post(self, request): # post method
form = RegistrationForm(request.POST) # create form object
if form.is_valid():
print "Form is validated"
user_data = form.save(commit=False)
user_data.save()
return render(request, self.template2, locals())
else:
print "with error"
return render(request, self.template1, locals())
我希望这会有所帮助。我仍在研究Django的良好实践。如果您正在寻找更有效的解决方案,那么您应该在views.py文件中尝试我下面的代码 您的forms.py代码将相同。但这是密码验证的泄漏
# to register auth user
class register_user(View):
template1 = "app_name/register.html" # define templates
template2 = "app_name/login.html"
def get(self, request): # get method
form = RegistrationForm()
return render(request, self.template1, locals())
def post(self, request): # post method
form = RegistrationForm(request.POST) # create form object
if form.is_valid():
print "Form is validated"
user_data = form.save(commit=False)
user_data.save()
return render(request, self.template2, locals())
else:
print "with error"
return render(request, self.template1, locals())
我希望这会有所帮助。我仍在研究Django的良好实践。好吧,至少
电子邮件
如果你这样说,应该会显示错误:{{form.email.errors}
。或者你真的像{{form.field.errors}}
那样拼写它吗?当然。不,我写的是真实的字段名,我就是这么说的,举个例子。这也是我的想法,但不幸的是,即使是电子邮件错误也没有正确显示,我真的不知道为什么会考虑向我们显示您的查看功能。我刚刚用查看功能更新了我的问题。如果您这样说,至少电子邮件应该显示错误:{{form.email.errors}
。或者你真的像{{form.field.errors}}
那样拼写它吗?当然。不,我写的是真实的字段名,我就是这么说的,举个例子。这也是我的想法,但不幸的是,即使是电子邮件错误也不能正确显示,我真的不知道为什么会考虑向我们显示您的查看功能。我刚刚用查看功能更新了我的问题它可以工作!非常感谢,现在我明白这个问题了。我想投票支持这个答案,但不幸的是,我的声誉不足以支持这个答案,所以我只是将它标记为接受:)它有效!非常感谢,现在我明白这个问题了。我想对这个答案投赞成票,但不幸的是,我的声誉不够,所以我刚刚将其标记为接受:)