gpt4 book ai didi

python - 程序在调试时运行良好,但在正常运行时崩溃

转载 作者:太空宇宙 更新时间:2023-11-03 17:13:09 27 4
gpt4 key购买 nike

当用户忘记密码时,我使用 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_dataform.is_valid() 填充。您忘记在表单中调用 super 实现。

def is_valid(self):
return (
super(ChangePasswordForm, self).is_valid()
and self.cleaned_data['password'] == self.cleaned_data['confirm_password']
)

但是,一般来说,我不鼓励覆盖 is_valid() ,而是覆盖 form.clean() 或类似的。正如 Brandon 所指出的,django 已经在它自己的 SetPasswordForm 中做到了这一点:

def clean_new_password2(self):
password1 = self.cleaned_data.get('password')
password2 = self.cleaned_data.get('confirm_password')
if password1 and password2:
if password1 != password2:
raise forms.ValidationError(
self.error_messages['password_mismatch'],
code='password_mismatch',
)
password_validation.validate_password(password2, self.user)
return password2

您可能会直接重复使用现有的 ChangePasswordForm ,它接受字段 'old_password''new_password1''new_password2',因此您可能需要调整您的模板。

关于python - 程序在调试时运行良好,但在正常运行时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33898190/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com