Django


1147 浏览 5 years, 6 months

6.6 表单验证

版权声明: 转载请注明出处 http://www.codingsoho.com/

Form Validition

一个完整的form验证过程-引用如下:

  • 函数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