我使用Django表单在用户忘记密码时更改密码:
#views.py
def change_forgotten_password(request, key):
if request.method == 'GET':
form = ChangePasswordForm()
return render(request, 'freelancestudent/change_forgotten_password.html', {'form': form})
else: # post
form = ChangePasswordForm(request.POST)
if form.is_valid():
user = User.objects.get(forgot_password_key=key)
user.set_password(form.cleaned_data['password'])
user.save()
return redirect('/')
#forms.py
class ChangePasswordForm(forms.Form):
password = forms.CharField(widget=forms.PasswordInput)
confirm_password = forms.CharField(widget=forms.PasswordInput)
def is_valid(self):
if self.cleaned_data['password'] == self.cleaned_data['confirm_password']:
return True
当我使用PyCharm的调试器一步一步地检查代码时,一切都完全按照我所希望的那样工作;如果密码匹配,则更新所选用户的密码。但是,如果将其作为(python manage.py runserver
)运行,则会显示错误:
AttributeError at /change-forgotten-password/wemnj8vvk37yvikf/
'ChangePasswordForm' object has no attribute 'cleaned_data'
在forms.py
中的一行,内容如下:
if self.cleaned_data['password'] == self.cleaned_data['confirm_password']:
...
form.cleaned_data
由form.is_valid()
填充。你忘了在表单中调用超级实现不过,一般来说,我不鼓励重写}中做到了这一点:
is_valid()
,而是重写form.clean()
或类似的内容。正如Brandon所指出的,django已经在自己的{您可以直接重用现有的^{} ,它接受字段
'old_password'
、'new_password1'
和'new_password2'
,因此您可能需要调整模板相关问题 更多 >
编程相关推荐