python – Django:当用户提交未完成的表单时如何引发异常?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – Django:当用户提交未完成的表单时如何引发异常?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2776字,纯文字阅读大概需要4分钟。
内容图文
![python – Django:当用户提交未完成的表单时如何引发异常?](/upload/InfoBanner/zyjiaocheng/826/08a7e9d7000a46578ac72e37ba20b1d4.jpg)
我有一个相对标准的RegistrationForm,如下所示:
class RegisterForm(forms.Form):
username = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'username'}), initial='')
email = forms.EmailField(widget=forms.TextInput(attrs={'placeholder': 'email'}), initial='')
password = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': 'password'}), initial='')
password_repeat = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': 'retype password'}), initial='')
如何在用户忘记填写一个或多个字段时创建一个返回错误的干净方法? (即“你忘了填写电子邮件字段”)
我在clean()方法中尝试了以下两个选项(我将使用password和password_repeat字段作为示例):
password = self.cleaned_data['password']
password_repeat = self.cleaned_data['password_repeat']
# initial values are set to '' for all fields, see above.
if password == '':
raise forms.ValidationError("You forgot to type in a password.")
elif password_repeat == '':
raise forms.ValidationError("You forgot to retype your password.")
第一个选项返回:
/ homepage /的KeyError /
‘密码’
try:
password = self.cleaned_data['password']
password_repeat = self.cleaned_data['password_repeat']
except KeyError(password):
raise forms.ValidationError("You forgot to fill in the password field.")
第二个选项返回:
/ homepage /的UnboundLocalError
在赋值之前引用的局部变量’password’
如果您可以提供允许检查其余字段的解决方案,那么奖励点(以便我可以返回绑定到用户成功提交的数据的表单).
解决方法:
您可以使用适用于所有Field类型的required属性,它们会自动执行此类验证.所以你的代码看起来像:
class RegisterForm(forms.Form):
username = forms.CharField(
widget = forms.TextInput(attrs = {'placeholder': 'username'}),
required = True)
email = forms.EmailField(
widget = forms.TextInput(attrs = {'placeholder': 'email'}),
required = True)
password = forms.CharField(
widget = forms.PasswordInput(attrs = {'placeholder': 'password'}),
required = True)
password_repeat = forms.CharField(
widget = forms.PasswordInput(attrs = {'placeholder': 'retype password'}),
required = True)
注意:我认为您也可以省略那些initial =”参数,如上所示.
我实际上不确定你为什么会收到你在问题中提到的错误,也许你可以发布你的views.py中的相关代码?这可能是因为您需要在实现的任何干净方法结束时返回cleaning_data.
我也只是说你使用干净的方法是不对的.如果您在form and field validation上参考文档的此页面,您会看到要验证单个字段,您使用特定的clean_< fieldname>方法,例clean_password_repeat.当验证同时涉及多个字段时,使用clean方法是合适的,您可能想要使用的一个示例是检查两个密码字段匹配的输入.
class RegisterForm(forms.Form):
# field definitions (above)
def clean(self):
password = self.cleaned_data['password']
password_repeat = self.cleaned_data['password_repeat']
if password != password_repeat:
raise forms.ValidationError(u"Passwords do not match.")
return cleaned_data
注意:代码未经过测试.
我希望这可以帮到你!
内容总结
以上是互联网集市为您收集整理的python – Django:当用户提交未完成的表单时如何引发异常?全部内容,希望文章能够帮你解决python – Django:当用户提交未完成的表单时如何引发异常?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。