2014-01-17 104 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

你怎么确定?不要忘记,正如我在回答中所提到的,密码存储在数据库中。 –