zoukankan      html  css  js  c++  java
  • Django--验证器

    编写验证器
    验证器是一个可调用的对象,它接受一个值,并在不符合一些规则时抛出ValidationError异常。验证器有助于在不同类型的字段之间重复使用验证逻辑。
    例如,这个验证器只允许偶数:
    from django.core.exceptions import ValidationError
    
    def validate_even(value):
        if value % 2 != 0:
            raise ValidationError('%s is not an even number' % value)
    你可以通过字段的validators参数将它添加到模型字段中:
    from django.db import models
    
    class MyModel(models.Model):
        even_field = models.IntegerField(validators=[validate_even])
    由于值在验证器运行之前会转化为Python,你可以在表单上使用相同的验证器:
    from django import forms
    
    class MyForm(forms.Form):
        even_field = forms.IntegerField(validators=[validate_even])

    你也可以使用带有 __call__()方法的类,来实现更复杂或可配置的验证器。

    例如,RegexValidator就用了这种技巧。如果一个基于类的验证器用于validators模型字段的选项,你应该通过添加deconstruct() 和__eq__() 方法确保它可以被迁移框架序列化

     
    验证器如何运行
    关于验证器如何在表单中运行,详见表单验证 。关于它们如何在模型中运行,详见 验证对象
    要注意验证器不会在你保存模型时自动运行,但是如果你使用ModelForm,它会在任何你表单包含的字段上运行你的验证器。关于模型验证器如何和表单交互,详见ModelForm 文档
     
    内建的验证器
    django.core.validators模块包含了一系列的可调用验证器,用于模型和表单字段。
    它们在内部使用,但是也可以用在你自己的字段上。它们可以用在field.clean() 方法之外,或者代替它。
     
    RegexValidator
    class RegexValidator([regex=None, message=None, code=None, _inversematch=None, flags=0])[source]
    Parameters:
    * **regex** – 如果不是`None`则覆写 [`regex`](#django.core.validators.RegexValidator.regex "django.core.validators.RegexValidator.regex")。可以是一个正则表达式字符串,或者预编译的正则表达式对象。
     
    * **message** – 如果不是`None`,则覆写 [`message`](#django.core.validators.RegexValidator.message "django.core.validators.RegexValidator.message")。
     
    * **code** – 如果不是`None`,则覆写[`code`](#django.core.validators.RegexValidator.code "django.core.validators.RegexValidator.code")。
     
    * **inverse_match** – 如果不是`None`,则覆写[`inverse_match`](#django.core.validators.RegexValidator.inverse_match "django.core.validators.RegexValidator.inverse_match")。
     
    * **flags** – 如果不是`None`,则覆写 [`flags`](#django.core.validators.RegexValidator.flags "django.core.validators.RegexValidator.flags")。
    这种情况下,[`regex`](#django.core.validators.RegexValidator.regex "django.core.validators.RegexValidator.regex") ,必须是正则表达式字符串,否则抛出[`TypeError`] 异常
     
    regex
    用于搜索提供的value的正则表达式,或者是预编译的正则表达式对象。通常在找不到匹配时抛出带有 message 和code的 ValidationError异常。
    这一标准行为可以通过设置inverse_match 为True来反转,这种情况下,如果找到匹配则抛出 ValidationError异常。通常它会匹配任何字符串(包括空字符串)。
     
    message
    验证失败时ValidationError所使用的错误信息。默认为"Enter a valid value"。
     
    code
    验证失败时ValidationError所使用的错误代码。默认为"invalid"。
     
    inverse_match
    New in Django 1.7.
    regex的匹配模式。默认为False。
     
    flags
    New in Django 1.7.
    编译正则表达式字符串regex时所用的标识。如果regex是预编译的正则表达式,并且覆写了flags,会产生TypeError异常。默认为 0。
     
    EmailValidator
    class EmailValidator([message=None, code=None, whitelist=None])[source]
    Parameters:
    * **message** – 如果不是 `None`,则覆写[`message`](#django.core.validators.EmailValidator.message "django.core.validators.EmailValidator.message")。
     
    * **code** – 如果不是 `None`,则覆写[`code`](#django.core.validators.EmailValidator.code "django.core.validators.EmailValidator.code")。
     
    * **whitelist** – 如果不是`None`,则覆写 [`whitelist`](#django.core.validators.EmailValidator.whitelist "django.core.validators.EmailValidator.whitelist")。
    message
    验证失败时ValidationError所使用的错误信息。默认为"Enter a valid email address"。
     
    code
    验证失败时ValidationError所使用的错误代码。默认为"invalid"。
     
    whitelist
    所允许的邮件域名的白名单。通常,正则表达式(domain_regex 属性) 用于验证 @ 符号后面的任何东西。
    但是,如果这个字符串在白名单里,就可以通过验证。如果没有提供,默认的白名单是 ['localhost']。
    其它不包含点符号的域名不能通过验证,所以你需要按需将它们添加进白名单。
     
    URLValidator
    class URLValidator([schemes=None, regex=None, message=None, code=None])[source]
    RegexValidator确保一个值看起来像是URL,并且如果不是的话产生'invalid'错误代码。
    回送地址以及保留的IP空间被视为有效。同时也支持字面的IPv6地址 (RFC 2732) 以及unicode域名。
    除了父类RegexValidator的可选参数之外,URLValidator接受一个额外的可选属性:
    schemes
    需要验证的URL/URI模式列表。如果没有提供,默认为 ['http', 'https', 'ftp', 'ftps']。IANA 网站提供了 有效的URI模式的完整列表作为参考。
    Changed in Django 1.7:
    添加了可选的schemes 属性。
    Changed in Django 1.8:
    添加了对IPv6 地址, unicode 域名, 以及含有验证信息的URL的支持。
     
    validate_email
    validate_email
    一个不带有任何自定义的EmailValidator实例。
     
    validate_slug
    validate_slug
    一个 RegexValidator实例,确保值只含有字母、数字、下划线和连字符。
     
    validate_ipv4_address
    validate_ipv4_address
    一个RegexValidator的实例,确保值是IPv4地址。
     
    validate_ipv6_address
    validate_ipv6_address[source]
    使用django.utils.ipv6 来检查是否是 IPv6 地址。
     
    validate_ipv46_address
    validate_ipv46_address[source]
    使用validate_ipv4_address 和 validate_ipv6_address 值是有效的 IPv4 或 IPv6 地址。
     
    validate_comma_separated_integer_list
    validate_comma_separated_integer_list
    一个RegexValidator的实例,确保值是整数的逗号分隔列表。
     
    MaxValueValidator
    class MaxValueValidator(_maxvalue, message=None)[source]
    如果value 大于 max_value,抛出带有'max_value'代码的ValidationError 异常。
    Changed in Django 1.8:
    添加了message参数。
     
    MinValueValidator
    class MinValueValidator(_minvalue, message=None)[source]
    如果value小于min_value,抛出带有'min_value'代码的ValidationError异常。
    Changed in Django 1.8:
    添加了message 参数。
     
    MaxLengthValidator
    class MaxLengthValidator(_maxlength, message=None)[source]
    如果value的长度大于max_length,抛出带有'max_length'代码的ValidationError 异常。
    Changed in Django 1.8:
    添加了message参数。
     
    MinLengthValidator
    class MinLengthValidator(_minlength, message=None)[source]
    如果value的长度小于min_length,抛出带有'min_length'代码的ValidationError异常。
    Changed in Django 1.8:
    添加了message 参数。
     

  • 相关阅读:
    4-8(四)badboy 脚本录制工具的安装
    4-8(三)Jmeter 工具的基本使用
    4-8(二)jmete 主要文件目录及简单了解 http 协议
    4-8(一)jmeter 基础概念、什么时候做性能测试、性能测试的前提、性能测试主要指标、开展性能测试必备条件
    jmeter 介绍及 windows/Linux下安装
    如何测试(四)朋友圈如何测试?
    如何测试(二)聊天功能如何测试?
    如何测试(一)优惠券如何测试?
    如何测试(三)购物车如何测试?
    自动化面试题三(41 ~ 73)
  • 原文地址:https://www.cnblogs.com/absoluteli/p/13984376.html
Copyright © 2011-2022 走看看