- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
当用户忘记密码时,我使用 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()
填充。您忘记在表单中调用 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/
嗨,我正在考虑开发一种文件传输程序,想知道我是否想要尽可能好的加密,我应该使用什么? 我会用 C# 开发它,所以我可以访问 .net 库 :P在我的 usb 上有一个证书来访问服务器是没有问题的,如果
我创建的这个计算两个数组的交集是线性的方法的复杂度(在良好、平均、最差的情况下)? O(n) public void getInt(int[] a,int[] b){ int i=0; int
我已经能够使用 RTCPeerConnection.getStats() API 获得 WebRTC 音频调用的各种统计信息(抖动、RTT、丢包等)。 我需要将整体通话质量评为优秀、良好、一般或差。
基本问题: 如果我正在讲述/修改数据,我应该通过索引硬编码索引访问文件的元素,即 targetFile.getElement(5);通过硬编码标识符(内部翻译成索引),即 target.getElem
在 Linux 上,我想知道要调用什么“C”API 来获取每个 CPU 的统计信息。 我知道并且可以从我的应用程序中读取 /proc/loadavg,但这是系统范围的负载平均值,而不是每个 CPU 的
在客户端浏览器中使用 fetch api,GET 或 POST 没有问题,但 fetch 和 DELETE 有问题。它似乎将 DELETE 请求方法更改为 OPTIONS。 大多数研究表明是一个cor
我是一名优秀的程序员,十分优秀!