zoukankan      html  css  js  c++  java
  • 表格和字段验证

    当调用方法"is_valid()"时会进行表单验证。如果要自定义此过程,可以进行各种更改,每个更改用于不同的目的。在表格处理期间运行三种类型的cleaning方法。这些通常在"is_valid()"在表单上调用方法时执行。

    通常来说,如果数据有错的话,任何cleaning方法都可以触发 ValidationError;如果数据没问题,那么该方法会把cleaned后的数据转化为Python object返回。

    表单的验证分为几个步骤,可以自定义或覆盖:

    1、Field上的to_python()方法是每次验证的第一步。

    它将值强制转换为正确的数据类型,如果不可能,则引发ValidationError。此方法接受窗口小部件的原始值并返回转换后的值。例如,FloatField会将数据转换为Python float或引发ValidationError。 Field上的validate()方法处理不适合验证器的特定于字段的验证。它需要一个已被强制转换为正确数据类型的值,并在任何错误上引发ValidationError。此方法不返回任何内容,不应更改该值。您应该覆盖它以处理您不能或不想放入验证器的验证逻辑。

    2、Field上的run_validators()方法运行所有字段的验证器,并将所有错误聚合到单个ValidationError中

    您不应该重写此方法。 Field子类上的clean()方法负责以正确的顺序运行to_python(),validate()和run_validators()并传播它们的错误。如果在任何时候,任何方法引发ValidationError,则验证将停止并引发该错误。此方法返回干净数据,然后将其插入到表单的cleaning_data字典中。 在表单子类上调用clean_ <fieldname>()方法 - 其中<fieldname>替换为表单字段属性的名称。此方法执行特定于该特定属性的任何清理,与其所在的字段类型无关。此方法未传递任何参数。您需要在self.cleaned_data中查找该字段的值,并记住此时它将是一个Python对象,而不是表单中提交的原始字符串(它将在cleaning_data中,因为一般字段clean()方法,上面,已经清理过一次数据)。 例如,如果要验证名为serialnumber的CharField的内容是否唯一,则clean_serialnumber()将是执行此操作的正确位置。您不需要特定字段(它只是一个CharField),但您需要特定于表单字段的验证,并且可能需要清理/规范化数据。 此方法的返回值将替换cleaning_data中的现有值,因此它必须是来自cleaning_data的字段值(即使此方法未更改它)或新清除的值。

    3、表单子类的clean()方法可以执行需要访问多个表单字段的验证。

    您可以在此处进行检查,例如“如果提供了字段A,则字段B必须包含有效的电子邮件地址”。如果愿意,此方法可以返回完全不同的字典,该字典将用作cleaning_data。 由于在调用clean()时运行了字段验证方法,因此您还可以访问表单的errors属性,该属性包含清除单个字段引起的所有错误。 请注意,Form.clean()覆盖引发的任何错误都不会与任何字段相关联。它们进入一个特殊的“字段”(称为__all__),如果需要,可以通过non_field_errors()方法访问它。如果要将错误附加到表单中的特定字段,则需要调用add_error()。 另请注意,重写ModelForm子类的clean()方法时需要特别注意。 这些方法按上面给出的顺序运行,一次一个字段。也就是说,对于表单中的每个字段(按照它们在表单定义中声明的顺序),运行Field.clean()方法(或其覆盖),然后运行clean_ <fieldname>()。最后,一旦为每个字段运行这两个方法,无论先前的方法是否引发了错误,都会执行Form.clean()方法或其覆盖。 以下提供这些方法中的每一种的实例。

     

     

     

     

     

     

  • 相关阅读:
    易语言常用源码
    ci的数据库地址
    格式化输出php数组
    mysql插入表情问题
    线程、进程与协程2
    线程、进程与协程
    if __name=='__main__"的作用
    动态导入模块
    面向对象补充之方法
    getpass模块
  • 原文地址:https://www.cnblogs.com/linyuhong/p/9493377.html
Copyright © 2011-2022 走看看