基于 Django1.10 文档的深入学习(24)—— Form and field validation 之 cleaned_data
来源:互联网 发布:包装袋定制淘宝 编辑:程序博客网 时间:2024/06/06 04:21
Form field default cleaning表单域默认清理
我们首先创建一个自定义表单字段,验证其输入是一个包含逗号分隔的电子邮件地址的字符串。全班看起来像这样:
from django import formsfrom django.core.validators import validate_emailclass MultiEmailField(forms.Field): def to_python(self, value): “”“将数据规范化为字符串列表。”“” #如果没有输入,返回一个空列表。 if not value: return [] return value.split(',') def validate(self, value): “”“检查值是否仅由有效的电子邮件组成。”“” #使用父母处理所需字段等。 super(MultiEmailField, self).validate(value) for email in value: validate_email(email)
使用此字段的每个表单都将运行这些方法,然后才能使用字段的数据完成任何其他操作。这是对这种类型的领域特定的清洁,无论它如何随后使用。
让我们创建一个简单的ContactForm
来演示如何使用这个字段:
class ContactForm(forms.Form): subject = forms.CharField(max_length=100) message = forms.CharField() sender = forms.EmailField() recipients = MultiEmailField() cc_myself = forms.BooleanField(required=False)
像任何其他表单字段一样使用MultiEmailField
。当窗体上调用了is_valid()
方法时,MultiEmailField.clean()
方法将作为清理过程的一部分运行,它将依次调用自定义to_python()
和validate()
方法。
Cleaning a specific field attribute清理特定字段属性
从上一个例子继续,假设在我们的ContactForm
中,我们要确保收件人字段始终包含地址“fred@example.com”
。这是对我们的表单特定的验证,所以我们不想把它放在一般的MultiEmailField
类中。相反,我们编写一个在收件人字段上运行的清理方法,如下所示:
from django import formsclass ContactForm(forms.Form): # Everything as before. ... def clean_recipients(self): data = self.cleaned_data['recipients'] if "fred@example.com" not in data: raise forms.ValidationError("你忘了弗雷德了!") #始终返回一个值作为新的清除数据,即使这种方法没有改变它。 return data
0 0
- 基于 Django1.10 文档的深入学习(24)—— Form and field validation 之 cleaned_data
- 基于 Django1.10 文档的深入学习(8)—— Model field reference 之 choices
- 基于 Django1.10 文档的深入学习(21)——The Forms API 之 Form.errors
- 基于 Django1.10 文档的深入学习(14)—— Request and response objects 之 HttpResponse objects
- 基于 Django1.10 文档的深入学习(17)——Customizing authentication 之 Custom users and permissions
- 基于 Django1.10 文档的深入学习(2)—— Settings.py 之 STATIC_*
- 基于 Django1.10 文档的深入学习(3)—— models.py 之 FileField
- 基于 Django1.10 文档的深入学习(4)—— models.py 之 class Meta
- 基于 Django1.10 文档的深入学习(5)—— Making queries 之 FOO_set
- 基于 Django1.10 文档的深入学习(6)—— Translation 之 short_description
- 基于 Django1.10 文档的深入学习(9)—— Extra instance methods 之 get_FOO_display()
- 基于 Django1.10 文档的深入学习(11)—— django.shortcuts 之 render()
- 基于 Django1.10 文档的深入学习(12)—— django.shortcuts 之 redirect()
- 基于 Django1.10 文档的深入学习(13)—— django.core.urlresolvers 之 reverse()
- 基于 Django1.10 文档的深入学习(13)—— Making queries 之 Q objects
- 基于 Django1.10 文档的深入学习(16)——Authentication backends 之 class ModelBackend
- 基于 Django1.10 文档的深入学习(22)——Sending email 之 send_mail()
- 基于 Django1.10 文档的深入学习(23)—— QuerySet API reference 之 icontains
- FGD(一)
- 设计模式之---适配器模式
- Swiper滑动Html5手机浏览器自适应
- 二分查找
- 分享几个开源的android项目的源码,基本上用androidstudio都可以编译成功
- 基于 Django1.10 文档的深入学习(24)—— Form and field validation 之 cleaned_data
- #include<>与#include" "的区别
- 查看linux服务器信息
- How to delete old image when update ImageField?
- 苦僧情
- geoserver发布切片影像地图
- 一个简单的Chrome浏览器“清理缓存”插件应用开发
- qmake: could not exec ‘/usr/lib/x86_64-linux-gnu/qt4/bin/qmake’: No such file or directory
- 实用网址