2014-01-17 102 views
2

當用戶成功登錄並進入主頁時,有一個鏈接「更改密碼」用於更改密碼。它顯示一個表單來更改密碼,有三個輸入框用於舊密碼,新密碼確認新密碼Django窗體更改密碼

這是我的代碼。

forms.py

class reset_form(forms.Form): 


    oldpassword = forms.CharField(max_length = 20, widget=forms.TextInput(attrs={'type':'password', 'placeholder':'your old Password', 'class' : 'span'})) 
    newpassword1 = forms.CharField(max_length = 20, widget=forms.TextInput(attrs={'type':'password', 'placeholder':'New Password', 'class' : 'span'})) 
    newpassword2 = forms.CharField(max_length = 20, widget=forms.TextInput(attrs={'type':'password', 'placeholder':'Confirm New Password', 'class' : 'span'})) 


    def clean(self): 
     if 'newpassword1' in self.cleaned_data and 'newpassword2' in self.cleaned_data: 
      if self.cleaned_data['newpassword1'] != self.cleaned_data['newpassword2']: 
       raise forms.ValidationError(_("The two password fields did not match.")) 
     return self.cleaned_data 

views.py


def change_password(request): 

    if request.method == 'POST': 
     form = reset_form(request.POST) 
     if form.is_valid(): 
      newpassword=form.cleaned_data['newpassword1'], 
      username=request.user.username 
      password=request.user.password 

      user = authenticate(username=username, password=password) 
      if user is not None: 
       user.set_password(newpassword) 
       user.save() 
       return HttpResponseRedirect('/reset/success/') 

      else: 
       return render(request, 'reset_password.html',{'error':'You have entered wrong old password','form': form}) 

     else: 
      return render(request, 'reset_password.html',{'error':'You have entered old password','form': form}) 
    else: 
     form = reset_form() 
    content = RequestContext(request, {'form': form}) 
    return render(request, 'reset_password.html', content,) 

提交與正確的舊密碼我得到這個消息表格後你輸入錯誤的舊密碼我不知道爲什麼我將這個錯誤消息通知給了我e請使用此代碼幫助

回答

5

由於某些原因,您正在使用存儲在數據庫中的密碼字段,通過request.user,而不是之後他們實際輸入的表單中。數據庫版本被散列,當你調用authenticate時,它再次散列,所以無法匹配。

您應該使用用戶在表單中輸入的值:

username = request.user.username 
password = form.cleaned_data['oldpassword'] 

user = authenticate(username=username, password=password) 
+0

感謝丹尼爾回答它真的幫助了我。但是現在我又發現了另一個問題,我的密碼被更改了,但是還有一些其他文本。現在我的密碼不是舊密碼,也不是我提供的新密碼。我該做什麼 ? –

+1

你怎麼確定?不要忘記,正如我在回答中所提到的,密碼存儲在數據庫中。 –