2011-04-07 87 views
1

我正在尝试为用户编写页面以更新其信息并更改其密码。显示用户输入错误密码的错误信息

我现在工作。我提供的代码有效,但我不知道如何告诉用户他们输入了错误的密码。如果用户输入密码,表单有效,但如果他们输入了错误的密码,我想表示表单无效。但是,如果我把forms.ValidationError(“some error msg”)放在else stmt中,它现在说forms.errors,它不会回到模板,但会在编译器msg页面中显示错误消息。

这是我forms.pyclass

EditUserForm(forms.Form): 

oldPassword = forms.CharField(
    label=u'Current Password', 
    widget = forms.PasswordInput() 
) 
password1 = forms.CharField(
    label=u'New Password', 
    widget=forms.PasswordInput() 
) 
password2 = forms.CharField(
    label=u'New Password (Again)', 
    widget=forms.PasswordInput() 
) 

def clean_password2(self): 
    if 'password1' in self.cleaned_data: 
     password1 = self.cleaned_data['password1'] 
     password2 = self.cleaned_data['password2'] 
     if password1 == password2: 
      return password2 
    raise forms.ValidationError('Passwords do not match.') 
+1

你在HTML表单中是否有Method =“POST”? – Kugel 2011-04-07 03:40:18

+0

是的,我确实有 – user671800 2011-04-07 04:28:38

回答

0

的问题是在你clean_oldPassword方法我 从django.contrib.auth.models导入用户

def edit_page(request): 

u = request.user 

if request.method == 'POST': 

    form = EditUserForm(request.POST) 

    if form.is_valid(): 

     if u.check_password(form.cleaned_data['oldPassword']): 

      u.set_password(form.cleaned_data['password1']) 

      u.save() 

      return HttpResponseRedirect('/')  

     else: 

      form.errors //Where I put forms.ValidationError() 

else: 

    form = EditUserForm() 

variables = RequestContext(request, { 

    'form': form, 'user': request.user 

})  

return render_to_response(

    'registration/Edit_User.html', 

    variables 

) 

这是。你在字符串'oldPassword'上调用check_password,而不是变量,所以自然会失败。

你还应该确保你的模板显示form.errors,所以你可以看到它为什么不验证。

+0

我改变了你的建议,它仍然没有做任何事情,但带我回到编辑用户信息页面。我输入了一些打印语句,但没有传递form.isValid()if语句。它也用来告诉你什么是错误的,如果密码不匹配,但现在它什么都不做。我的模板中也有from.erros。 – user671800 2011-04-10 01:39:51