Django
1400 浏览 6 years, 1 month
6.6 表单验证
版权声明: 转载请注明出处 http://www.codingsoho.com/Form Validition
函数full_clean()依次调用每个field的clean()函数,该函数针对field的max_length,unique等约束进行验证,如果验证成功则返回值,否则抛出ValidationError错误。如果有值返回,则放入form的cleaned_data字典中。
如果每个field的内置clean()函数没有抛出ValidationError错误,则调用以clean_开头,以field名字结尾的自定义field验证函数。验证成功和失败的处理方式同步骤1。
最后,调用form的clean()函数——注意,这里是form的clean(),而不是field的clean()——如果clean没有错误,那么它将返回cleaned_data字典。
如果到这一步没有ValidationError抛出,那么cleaned_data字典就填满了有效数据。否则cleaned_data不存在,form的另外一个字典errors填上验证错误。在template中,每个field获取自己错误的方式是:""。
最后,如果有错误is_valid()返回False,否则返回True。
验证:
分为多个层次,检测失败会返回 ValidationError
- to_python() [forms.Field] 转换成python的类型 使用范例
- validate() [forms.Field] 针对特别字段验证,又不想放到验证器当中,不返回值
- run_validators() 运行所有字段级别验证,收集错误,不需要改写
- 字段级别clean() 调用上面3项验证,一旦有错,验证停止,否则返回 clean data 字典
- 表单级别clean_<fieldname>() 验证特别的字段
- 表单级别clean() 负责整个表单的验证,手工返回 self.cleaned_data
cleaned_data
User input can be accessed through a dictionary at form.data, and if the form is valid, validated user input can be accessed at form.cleaned_data