基于 Django1.10 文档的深入学习(24)—— Form and field validation 之 cleaned_data

Form field default cleaning表单域默认清理

我们首先创建一个自定义表单字段,验证其输入是一个包含逗号分隔的电子邮件地址的字符串。全班看起来像这样:

from django import forms
from django.core.validators import validate_email

class 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 forms

class 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值