本文通过注册页面的form组件,查看其中使用的全局钩子和局部钩子。

# Create your views here.
class RegForm(forms.Form):username = forms.CharField(min_length=3,label="用户名",help_text=‘‘,error_messages={"required": "不能为空","invalid": "格式错误","min_length": "用户名最短8位"})password = forms.CharField(min_length=3,label="密码",help_text=‘6~16个字符,区分大小写‘,error_messages={"required": "不能为空","invalid": "格式错误",},widget=forms.widgets.PasswordInput)re_password = forms.CharField(min_length=3,label="确认密码",help_text=‘请再次填写密码‘,error_messages={"required": "不能为空","invalid": "格式错误",},widget=forms.widgets.PasswordInput)gender = forms.fields.ChoiceField(choices=((1, "男"), (2, "女"), (3, "保密")),label="性别",initial=3,widget=forms.widgets.RadioSelect)phone = forms.fields.CharField(label="电话",error_messages={"required": "不能为空",},)email = forms.fields.CharField(label=‘邮箱‘,help_text=‘6~18个字符,可使用字母、数字、下划线‘,widget=forms.widgets.EmailInput,error_messages={"required": "不能为空","invalid": "格式错误",},)# 批量给form表单里的字段加样式def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)for field in iter(self.fields):field_obj = self.fields[field]if not isinstance(field_obj, forms.fields.ChoiceField):field_obj.widget.attrs.update({‘class‘: ‘form-control‘})# 全局钩子,此处用来判断两次输入的密码 def clean(self):pwd = self.cleaned_data.get(‘pwd‘)re_pwd = self.cleaned_data.get(‘re_pwd‘)if pwd != re_pwd:self.add_error(‘re_pwd‘, ‘两次密码不一致‘)raise ValidationError(‘两次密码不一致‘)else:return self.cleaned_data# 局部钩子函数,写给phone的校验函数def clean_phone(self):phone = self.cleaned_data.get(‘phone‘)if not re.findall(‘^1[0-9]{10}$‘, phone):raise ValidationError("格式错误!")else:return phone

关于钩子函数:

源码里的  forms/forms.py

源码中的钩子函数应用

转载于:https://www.cnblogs.com/JetpropelledSnake/p/9397889.html

Django学习笔记之form组件的局部钩子和全局钩子相关推荐

  1. vue学习笔记-03-浅谈组件-概念,入门,如何用props给组件传值?

    vue学习笔记-03-浅谈组件-概念,入门,如何用props给组件传值? 文章目录 vue学习笔记-03-浅谈组件-概念,入门,如何用props给组件传值? 什么是组件? 为什么要使用组件? 如何使用 ...

  2. django学习笔记02

    原创博客地址:django学习笔记02 第一章:模型层 1.8 查询操作 一.创建对象 1 2 3 4 5 >>> from blog.models import Blog > ...

  3. 千锋Django学习笔记

    千锋Django学习笔记 文章目录 千锋Django学习笔记 写在前面 1. MVC和MTV 2. Django简介 3. MTV简单流程 4. 和Model的简单对接 5. Model 6. Tem ...

  4. django 学习笔记

    django 学习笔记 启动虚拟机: workon bj18_py3 创建一个项目: django-admin.py startproject mysite 启动开发用服务器:从外层项目 mysite ...

  5. 分享:Django学习笔记(4)---ManyToMany 添加、删除关联、查询

    Django学习笔记(4)---ManyToMany 添加.删除关联.查询 http://my.oschina.net/u/572994/blog/105280

  6. django学习笔记03

    原创博客地址:django学习笔记03 第一章,模型层 查询集API 一.QuerySet何时被提交 迭代 QuerySet是可迭代的,在首次迭代查询集时执行实际的数据库查询 切片:如果使用切片的&q ...

  7. django学习笔记01

    原创博客地址:django学习笔记01 基于教程,刘江的博客教程Django教程:https://www.liujiangblog.com/course/django/87 第一章:模型层 1.1 模 ...

  8. Django学习笔记---第一天

    Django学习笔记 1.Django的安装 //如果不指定版本号,默认安装最新版 pip3 install django==1.11.8 关于Django的版本和python的版本依赖关系,请看下图 ...

  9. Django学习笔记(五)

    Django学习笔记(五) MVC和MTV对比 传统的MVC(Model-View-Controller) M 模型层,主要是对数据库层的封装 V 视图层,向用户展示结果 C 控制层,用于请求,获取数 ...

  10. 梅科尔工作室-Django学习笔记(二次学习)(3)

    本次学习的是如何用django实现前端鸿蒙OS登录 下面介绍一下本次的操作过程. 1.首先创立MySQL数据并将数据库导入到django当中 其中:导入数据库的操作: 2.配置urls 对应新建的pe ...

最新文章

  1. html5 生存游戏,html5版生命游戏
  2. Python学习(10)元组
  3. Leet Code OJ 206. Reverse Linked List [Difficulty: Easy]
  4. PowerTip of the Day from powershell.com上周汇总(六)
  5. 钱币掉落动画android,mpvue实现小程序签到金币掉落动画(api实现)
  6. JAVA-Lambda表达式
  7. C/C++ SQLite 之基础篇
  8. 计算机术语列是,计算机术语-RAM ROM
  9. 一些必看的jQuery导航插件和教程
  10. C#与vb6 com组件的互相调用方法
  11. globalmapper如何选取图像上的点_图像配准算法
  12. 利用IsPostBack检查网页是不是第一次进入(asp.net)
  13. canvas贝塞尔曲线爱心_HTML5 Canvas 绘制贝塞尔曲线 Bezier and quadratic curves
  14. 【低代码平台浅析】钉钉宜搭
  15. Unity CityEngine 根据地图中建筑矢量数据批量建模
  16. 用WebCollector 2.x爬取新浪微博(无需手动获取cookie)
  17. 解决桥接模式连接虚拟机的问题
  18. 王健林:万达体育和传奇影业都要开展资本运作 今年要出成绩
  19. Manifest is not valid JSON. Line: 1, column: 1 项目打包报错解决方法
  20. nginx另类复杂的架构

热门文章

  1. C盘空间不足怎么办?试试这款软件
  2. Pyts入门之时间序列的分解---奇异谱分析(七)
  3. 使用MarkDown来写一份漂亮简约的简历
  4. 操盘手 李彪 照片[转]
  5. 现代化智能一体化机柜
  6. 四、day02切换滑块
  7. Win7 ASP连接数据库“未找到提供程序.该程序可能未正确安装”问题
  8. 3DMine安装教程(附详细图文安装步骤)
  9. 3DMine V202006体验版本下载
  10. c语言产生不同随机数,怎样用c语言产生不同的随机数