form——验证器Validators

form表单最大的作用就是验证功能了,通过cleaned_data清洗,我们可以获取传来的值,通过参数、验证器、自定义验证方法,我们可以做到很多的验证。

验证器可用于在不同类型的字段之间重用验证逻辑。validators有自带的验证器,也可以自己定义一个验证器。在验证某个字段的时候,可以传递一个validators参数用来指定验证器,进一步对数据进行过滤。验证器有很多,但是很多验证器其实已经通过这个Field或者一些参数就可以指定了。比如EmailValidator,可以通过EmailField来指定,比如MaxValueValidator,可以通过max_value参数来指定。以下是一些常用的验证器:

from django.core import validators
  1. MaxValueValidator:验证最大值。
  2. MinValueValidator:验证最小值。
  3. MinLengthValidator:验证最小长度。
  4. MaxLengthValidator:验证最大长度。
  5. EmailValidator:验证是否是邮箱格式。
  6. URLValidator:验证是否是URL格式。
  7. RegexValidator:如果还需要更加复杂的验证,那么可以通过正则表达式的验证器

其中最常用到的就是RegexValidator,他可以通过正则自己定义验证器。如下面自己定义的一个验证手机号的例子。自定义验证器后,将验证器加入到validators的列表中。

# 创建手机号的正则校验器
mobile_validator = RegexValidator(r"^1[3-9]\d{9}$", "手机号码格式不正确")
 mobile = forms.CharField(max_length=11, min_length=11, validators=[mobile_validator, ],error_messages={"min_length": "手机号长度有误", "max_length": "手机号长度有误","required": "手机号不能为空"})

自定义验证

对于一些字段,可能还有一些更复杂的验证,我们可以采用函数的形式,构造自定义验证。一种是针对一个字段的验证,函数名为clean_字段名(self),还有一种是针对多个字段一起验证,函数名为clean(self),clean方法的第一步需要重新调用父类的clean方法。这两种方式,如果验证失败,那么就抛出一个验证错误ValidationError 。

# 验证手机号if (not real_image_code) or (image_text != real_image_code):raise forms.ValidationError("图片验证失败")
from django import formsclass ContactForm(forms.Form):# Everything as before....def clean_recipients(self):data = self.cleaned_data['recipients']if "fred@example.com" not in data:raise forms.ValidationError("You have forgotten about Fred!")# Always return a value to use as the new cleaned data, even if# this method didn't change it.return data
from django import formsclass RegisterTable(forms.Form):username = forms.CharField(min_length=1,max_length=10)phone = forms.CharField(validators=[validators.RegexValidator("1[345678]\d{9}", message="请输入正确的手机号码")])  # message会在表单类.errors.get_json_data()中获得# 对某个字段进行自定义的验证方式是,定义一个方法,这个方法的名字定义规则是:clean_fieldnamedef clean_phone(self):phone = self.cleaned_data.get("phone")  # 获得字段数据ret = User.objects.filter(phone=phone).exists()  # 如果已存在if ret:raise forms.ValidationError(message="{}已经被注册".format(phone))  # 抛出异常# message会在表单类.errors.get_json_data()中获得else:return phone

下面是clean方法:

class RegisterTable(forms.Form):username = forms.CharField(min_length=1,max_length=10)phone = forms.CharField(validators=[validators.RegexValidator("1[345678]\d{9}", message="请输入正确的手机号码")])pwd = forms.CharField(min_length=5)  #密码pwd_repeat = forms.CharField(min_length=5)  #重复的密码def clean_phone(self):phone = self.cleaned_data.get("phone")  ret = User.objects.filter(phone=phone).exists()if ret:raise forms.ValidationError(message="{}已经被注册".format(phone))return phonedef clean(self):  #最后审查ret = super(RegisterTable, self).clean()pwd = ret.get("pwd") # ==self.cleaned_data.get("pwd")pwd_repeat = ret.get("pwd_repeat")if pwd != pwd_repeat:raise forms.ValidationError(message="密码不一致")else:return ret

 

转载于:https://www.cnblogs.com/longwhite/p/10397647.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/276080.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

若川知乎问答:做前端感觉很吃力怎么办?

前些日,我发了一篇推文《做前端感到越来越吃力了!怎么办?》,虽然是推广,但阅读量却很高,推广标题我们大概率不能改,感觉骗了大家,掉粉挺多人。写稿的人可能就是看到了知乎这个问答。…

惠新宸php教程_惠新宸:首位国人加入PHP语言官方开发组

PHP开发组终于有了国人参与。最近, Laruence(真名惠新宸)加入了PHP语言官方开发组。 做PHP的同学一定很熟悉他了,他的博客风雪之隅(https://www.laruence.com/)发表了很多PHP源代码分析和扩展开发相关的文章。他使用PHP扩展开发的PHP框架Yaf,…

d3 制作条形图_停止制作常见的坏条形图的5个简单技巧

d3 制作条形图Bar charts were probably the first type of chart you were ever introduced to in first grade. Their simplicity makes them a standard in visualizing data, but it is its accessibility that leads visualizers to often be careless with bar charts.乙…

SVN之使用原则

以下是我起草的部门SVN规范里原则的一部分。文件提交时要求必须提交注释,注明相关修改信息,例如bug号、任务描述等。具体内容可采用约定或者设置的形式。你所提交的改变将体现给其他开发者,要明白提交的后果,提交之前要慎重。代码…

图解 React-router 源码

大家好,我是若川。欢迎加我微信 ruochuan12今天分享一篇react-router源码文章,深入理解路由的本质。微信预计阅读只需8分钟。点击下方卡片关注我,或者查看源码系列文章。阅读源码小 tips:从整体到细节,刚开始不要太拘泥…

青海西宁市大通县非洲猪瘟疫区解除封锁

中新网1月23日电 据农业农村部网站消息,农业农村部接到青海省农业农村厅报告,经评估验收合格,青海省西宁市大通县非洲猪瘟疫区解除封锁。 大通县非洲猪瘟疫情发生后,当地按照非洲猪瘟疫情应急预案和非洲猪瘟防治技术规范要求&…

回顾:中网饱经沧桑劫后余生 万平国回首艰辛历程

转载链接:http://tech.sina.com.cn/i/c/75586.shtml 回顾:中网饱经沧桑劫后余生 万平国回首艰辛历程 http://www.sina.com.cn 2001年07月12日 13:25 财经时报   “最早的聊天室是我们做的、最早的检索也是中网公司的、中网公司也是最早做电子商务的数…

android 辅助功能_辅助功能简介

android 辅助功能Accessibility may be more than a moral imperative to ensure products are inclusive of more people who already experience barriers in daily life — it has a very practical outcome, benefiting everyone including the person with the disability…

【columnstore】mariadb columnstore 数据迁移

通过cpimport传输迁移: 官方文档:https://mariadb.com/kb/en/lib...步骤: 1.导出库中表的表结构,不要数据 # mysqldump -h 127.0.0.1 -uroot -p -P 4066 --skip-lock-tables test -d > test.sql 2.nc将文件传输至目标机器192.…

我有一个梦想

我有一个梦想,做一名大师傅,快乐地下厨房。土豆在我刀下歌唱,茄子在我锅里跳舞。盘碗勺筷为我呐喊,油盐酱醋为我喝彩。 我有一个梦想,让土豆和茄子不再孤单,再加几个青椒,做一盘地三鲜。还要少放…

推荐几个前端大佬,真的厉害!

新的一年,推荐几个还在坚持输出的高质量前端公众号,你想要的:React/Vue/Node/工程化/面试经验等, 这里都有。不多说,直接看介绍。???? 程序员成长指北考拉,一个有趣且乐于分享的妹子,专注 N…

MySQL查询结果导出到文件

转载链接:http://eric-gcm.iteye.com/blog/1127734 选择某些行作为需要的数据 SELECT id,dbname FROM index into outfile "d://aaa.txt"; 一般大家都会用 “SELECT INTO OUTFIL”将查询结果导出到文件,但是这种方法不能覆盖或者添加到已经创建…

RawCode-本身就是实验性的8位类型

What if a type is created solely from the bit-representation of characters?如果仅根据字符的位表示形式创建类型怎么办? This question was the basis of creating this experimental type. The type no longer uses familiar characters. ‘A’ looks like …

2d访问冲突_Light | 基于环形分隔微镜阵列的高速随机访问轴向聚焦系统

撰稿 | OSANJU 刘 扬01导读近日,来自美国加州大学伯克利分校的Rikky Muller教授团队,在国际顶尖学术期刊《Light: Science & Applications》发表了题为“A micromirror array with annular partitioning for high-speed random-access axial focus…

编译出现ARM与THUMB冲突

问题: fatal error LNK1112: module machine type THUMB conflicts with target machine type ARM 解决方法: 在project-setting-linker-command line下,添加/machine:THUMB,如下: 转载于:https://www.cnblogs.com/xfd…

阿里腾讯面试梳理个人成长经历分享

大家好,我是若川。欢迎加我微信 ruochuan12,长期交流学习。今天分享一篇江西师范大学大四同学学习一年前端入职腾讯的经历,关注很久的读者朋友应该知道我也是毕业于江西不那么知名的高校。微信预计阅读只需18分钟。点击下方卡片关注我&#x…

解决Ubuntu系统中文乱码显示问题

转载链接:http://www.linuxidc.com/Linux/2014-02/96939.htm 一. Ubuntu默认的中文字符编码 Ubuntu默认的中文字符编码为zh_CN.UTF-8,这个可以在 /etc/environment中看到: sudo gedit /etc/environment 可以看到如下内容: PATH&qu…

unity 局部照亮_通过著名的艺术家照亮“光与空间运动”

unity 局部照亮Ever since minimalism momentously gained popularity in the 1960’s, the “Light and Space” movement has naturally acquired prominence for its stunning juxtaposition in geometric abstraction, luminescence, and space. Artwork from this distinc…

如何抓住重点,系统高效地学习数据结构与算法?

你是否曾跟我一样,因为看不懂数据结构和算法,而一度怀疑是自己太笨?实际上,很多人在第一次接触这门课时,都会有这种感觉,觉得数据结构和算法很抽象,晦涩难懂,宛如天书。正是这个原因…

Google Map浏览下载器

很久没有更新博客了,最近为了玩Google Map,专门写了个小工具。用以在浏览Google地图时,将关心区域的图片保存到本地。软件主界面如下图: 主界面提取子库主要功能有: 1、可以浏览Google网站的三种图:交通、地…