2011-04-07 137 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