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)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2018-07-06 python接口自动化24-有token的接口项目使用unittest框架设计
2018-07-06 python笔记21-列表生成式
2017-07-06 Fiddler抓包11-HTTPS证书Actions无法导出问题