Django 表单验证 KeyError
Django Form Validation KeyError
编辑:
我将此搁置,以防有人和我一样愚蠢。
解决方法:重启apache服务器..
说明:我在 运行 时正在实时更改内容,我更改的一些内容已立即发送过来并立即生效。有些地方需要服务器重启才能生效。我只是花了很多时间更改尽可能多的东西,以尝试在重新启动时让它正常工作。
编辑结束
我正在尝试创建一个注册页面,但每当我尝试验证时,我都会遇到键盘错误。
我已经尝试了很长一段时间寻找解决方案,并查看了很多我认为应该有效的堆栈溢出答案,但由于某种原因根本没有奏效。
错误总是出现在同一行,无论哪个字段留空(password1 或 password2)
清洁:
def clean(self):
if 'password1' in self.cleaned_data and 'password2' in self.cleaned_data and self.cleaned_data['password1'] != self.cleaned_data['password2']:
raise forms.ValidationError("Passwords do not match")
return cleaned_data
表单元素:
username = forms.CharField(required = False)
password1 = forms.CharField(required = False, widget=forms.PasswordInput, label='Password')
password2 = forms.CharField(required = False, widget=forms.PasswordInput, label='Repeat Password')
email = forms.EmailField(required = False)
来自 views.py 的相关事件:
if request.method == 'POST':
form = UserForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect("/register/success")
else:
form = UserForm()
return render(request, 'register.html', {'form':form})
我在 HTML 中的表单模板是一个 table,每行 4 行 3 列。第一列是错误,通常是空白的,但如果有的话,会弹出与该字段相关的错误。第二个是字段的标签,第三个是字段本身的文本框。
编辑:我决定在提交之前多测试一下,它似乎发生在第 44 行,无论第 44 行是什么。如果它在不同的函数中?没关系,第 44 行。所有字段最初都是必需的,但在此测试期间我将它们全部更改为 False,我知道如果我将 username/email 留空,此时会出错。
这是堆栈跟踪:
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
149. response = self.process_exception_by_middleware(e, request)
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
147. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/register/views.py" in register
10. if form.is_valid():
File "/usr/local/lib/python2.7/dist-packages/django/forms/forms.py" in is_valid
161. return self.is_bound and not self.errors
File "/usr/local/lib/python2.7/dist-packages/django/forms/forms.py" in errors
153. self.full_clean()
File "/usr/local/lib/python2.7/dist-packages/django/forms/forms.py" in full_clean
363. self._clean_form()
File "/usr/local/lib/python2.7/dist-packages/django/forms/forms.py" in _clean_form
390. cleaned_data = self.clean()
File "/register/forms.py" in clean
44. temp = 2
Exception Type: KeyError at /register/
Exception Value: 'password1'
[the error] appears to happen at line 44, no matter what is at line 44. If it's in a different function? Doesn't matter, line 44.
更改代码后需要重启服务器。如果服务器仍然说错误在第 44 行,这意味着您在更改代码后还没有重新启动服务器。
如果您使用的是 Django 开发服务器(即 ./manage.py runserver
),那么它应该检测到代码更改并重新启动。但是,如果您在生产环境中,则可能需要手动重启服务器(例如 Apache)。
希望重新启动您的服务器会使错误消失。如果不是,请用完整的表格和完整的回溯更新错误。
编辑:
我将此搁置,以防有人和我一样愚蠢。
解决方法:重启apache服务器..
说明:我在 运行 时正在实时更改内容,我更改的一些内容已立即发送过来并立即生效。有些地方需要服务器重启才能生效。我只是花了很多时间更改尽可能多的东西,以尝试在重新启动时让它正常工作。
编辑结束
我正在尝试创建一个注册页面,但每当我尝试验证时,我都会遇到键盘错误。
我已经尝试了很长一段时间寻找解决方案,并查看了很多我认为应该有效的堆栈溢出答案,但由于某种原因根本没有奏效。
错误总是出现在同一行,无论哪个字段留空(password1 或 password2)
清洁:
def clean(self):
if 'password1' in self.cleaned_data and 'password2' in self.cleaned_data and self.cleaned_data['password1'] != self.cleaned_data['password2']:
raise forms.ValidationError("Passwords do not match")
return cleaned_data
表单元素:
username = forms.CharField(required = False)
password1 = forms.CharField(required = False, widget=forms.PasswordInput, label='Password')
password2 = forms.CharField(required = False, widget=forms.PasswordInput, label='Repeat Password')
email = forms.EmailField(required = False)
来自 views.py 的相关事件:
if request.method == 'POST':
form = UserForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect("/register/success")
else:
form = UserForm()
return render(request, 'register.html', {'form':form})
我在 HTML 中的表单模板是一个 table,每行 4 行 3 列。第一列是错误,通常是空白的,但如果有的话,会弹出与该字段相关的错误。第二个是字段的标签,第三个是字段本身的文本框。
编辑:我决定在提交之前多测试一下,它似乎发生在第 44 行,无论第 44 行是什么。如果它在不同的函数中?没关系,第 44 行。所有字段最初都是必需的,但在此测试期间我将它们全部更改为 False,我知道如果我将 username/email 留空,此时会出错。
这是堆栈跟踪:
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
149. response = self.process_exception_by_middleware(e, request)
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
147. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/register/views.py" in register
10. if form.is_valid():
File "/usr/local/lib/python2.7/dist-packages/django/forms/forms.py" in is_valid
161. return self.is_bound and not self.errors
File "/usr/local/lib/python2.7/dist-packages/django/forms/forms.py" in errors
153. self.full_clean()
File "/usr/local/lib/python2.7/dist-packages/django/forms/forms.py" in full_clean
363. self._clean_form()
File "/usr/local/lib/python2.7/dist-packages/django/forms/forms.py" in _clean_form
390. cleaned_data = self.clean()
File "/register/forms.py" in clean
44. temp = 2
Exception Type: KeyError at /register/
Exception Value: 'password1'
[the error] appears to happen at line 44, no matter what is at line 44. If it's in a different function? Doesn't matter, line 44.
更改代码后需要重启服务器。如果服务器仍然说错误在第 44 行,这意味着您在更改代码后还没有重新启动服务器。
如果您使用的是 Django 开发服务器(即 ./manage.py runserver
),那么它应该检测到代码更改并重新启动。但是,如果您在生产环境中,则可能需要手动重启服务器(例如 Apache)。
希望重新启动您的服务器会使错误消失。如果不是,请用完整的表格和完整的回溯更新错误。