• python测试开发django-105.form表单自带的一些校验(validators)


    前言

    validators自带一些常用的验证器,也可以自己定义一个验证器。在验证某个字段的时候,可以传validators参数用来指定验证器,以下是一些常用的验证器

    • MaxValueValidator:验证最大值。
    • MinValueValidator:验证最小值。
    • MinLengthValidator:验证最小长度。
    • MaxLengthValidator:验证最大长度。
    • EmailValidator:验证是否是邮箱格式。
    • URLValidator:验证是否是URL格式。
    • RegexValidator:正则表达式的验证器

    RegexValidator 正则验证器

    比如通过正则匹配手机号必须是纯数字,并且必须以132开头的手机号

    tel = forms.CharField(validators=[
                              RegexValidator(r'[0-9]+', '手机号必须是纯数字'),
                              RegexValidator(r'^132', '手机号必须132开头'),
                              ])
    

    校验URL

    URLValidator 验证是否是 URL中的 slug,什么是slug?

    你将如何用一个URL引用这个对象,用一个有意义的名字?您可以使用Article.id使URL如下所示:
    > www.example.com/article/23
    
    或者,你可以这样引用标题:
    
    > www.example.com/article/The 46 Year Old Virgin
    
    问题是,空格在URL中无效,它们需要被%20替换,这很难看,如下所示:
    
    www.example.com/article/The%2046%20Year%20Old%20Virgin
    
    这不是解决我们有意义的网址。这不是更好吗:
    
    > www.example.com/article/the-46-year-old-virgin
    
    这就是 slug. 所有字母都用小写字母,空格用连字符替换
    
     $slug = url_title($this->input->post('title'), 'dash', TRUE);
    
    用于将字符串 中的所有空格替换成连接符(-),并将所有字符转换为小写。 这样其实就生成了一个 slug ,可以很好的用于创建 URI 。
    

    在form表单中验证slug

    username = forms.CharField(label="URL",
                                   validators=[validators.validate_slug],
                                   error_messages={'required': '不能为空',})
    

    validators.validate_slug 在validators源码中可以看到

    slug_re = _lazy_re_compile(r'^[-a-zA-Z0-9_]+')
    validate_slug = RegexValidator(
        slug_re,
        # Translators: "letters" means latin letters: a-z and A-Z.
        _("Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."),
        'invalid'
    )
    

    校验失败的时候,在页面上的提示语是:Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.

    可以在error_messages中定义'invalid'不合法时,中文提示语

    username = forms.CharField(label="URL",
                                   validators=[validators.validate_slug],
                                   error_messages={'required': '不能为空',
                                                   'invalid': '输入参数不合法'})
    

    EmailValidator

    EmailField 邮箱字段会自带校验邮箱格式

    # 作者-上海悠悠 QQ交流群:717225969
    # blog地址 https://www.cnblogs.com/yoyoketang/
    
    username = forms.EmailField(required=True,
                                    label="邮箱",
                                    error_messages={
                                       'required': '用户名不能为空',
                                       'invalid': '格式不合法'
                                   })
    

    CharField 也可以添加邮箱校验:validators.validate_email

    username = forms.CharField(label="Email",
                                   validators=[validators.validate_email],
                                   error_messages={'required': '不能为空',
                                                   'invalid': '邮箱格式不合法'})
    

    也可以使用 EmailValidator 验证是否是邮箱格式,跟上面实际上是等价的,在validators源码中可以看到

    validate_email = EmailValidator()
    

    使用 validators.EmailValidator() 校验

    username = forms.CharField(label="Email",
                                   validators=[validators.EmailValidator()],
                                   error_messages={'required': '不能为空',
                                                   'invalid': '邮箱格式不合法'})
    

    validate_integer 校验整数

    validators.validate_integer 可以校验输入的整数

    # 作者-上海悠悠 QQ交流群:717225969
    # blog地址 https://www.cnblogs.com/yoyoketang/
    
    username = forms.CharField(label="username",
                                   validators=[validators.validate_integer],
                                   error_messages={'required': '不能为空',
                                                 })
    

    validators.validate_integer 方法在validators中源码,实际上也是正则匹配的

    integer_validator = RegexValidator(
        _lazy_re_compile(r'^-?d+'),
        message=_('Enter a valid integer.'),
        code='invalid',
    )
    
    
    def validate_integer(value):
        return integer_validator(value)
    

  • 相关阅读:
    线程间操作无效: 从不是创建控件“Control Name'”的线程访问它问题的解决方案及原理分析
    C#打印图片
    javascript 地址栏写法
    SQLServer获取Excel中所有Sheet
    C#多页打印实现
    clear在CSS中的妙用
    mitmproxy使用总结
    本地回路抓包问题
    博客园界面优化
    CentOS基于MySQL提供的Yum repository安装MySQL5.6
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/14977429.html
Copyright © 2020-2023  润新知