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_]+\Z')
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+\Z'),
message=_('Enter a valid integer.'),
code='invalid',
)

def validate_integer(value):
return integer_validator(value)

2021年第八期《python接口web自动化+测试开发》7.17号开学(课程全面升级!) 加量不加价(新增postman, 赠送selenium和python基础2个课)

本期上课时间:7月17号-10月16号,每周六、周日晚上20:30-22:30

(0)

相关推荐