Django笔记&教程 6-4 forms进阶操作,重写forms方法
Django 自学笔记兼学习教程第6章第4节——forms进阶操作,重写forms方法
点击查看教程总目录
1 - 重写clean方法
在本章第三节中,我们举了个注册学生账号的例子,里面我们使用模型来建立表单。
一般来讲,注册账号的页面,都需要用户填写两次密码进行确认。
那么我们这里需要对第三节中的代码进行一个拓展。
首先是要新增一个确认密码的字段,这个很简单,在StuRegisterForm中添加这样一行即可:
confirm_password = forms.CharField(widget=forms.PasswordInput(), label="确认密码")
那么接下来还需要什么呢?
还需要进行验证,验证两个字段内容是否一致。
这代表我们需要重写下这个表单类的验证方法。
表单的验证是一个比较复杂的过程,分很多步骤,每一个步骤负责一部分验证工作。
具体的详细步骤,可以查阅参考文献进行拓展:Form and field validation
这里我们只介绍下需要用到的:
表单子类的clean()方法,该方法可以执行需要访问多个表单字段的验证。
重写后的StuRegisterForm如下
class StuRegisterForm(forms.ModelForm):
confirm_password = forms.CharField(widget=forms.PasswordInput(), label="确认密码")
class Meta:
model = Student
fields = ('grade',
'name',
'password',
'confirm_password',
'gender',
'birthday',
'email',
'info')
def clean(self):
cleaned_data = super(StuRegisterForm, self).clean()
password = cleaned_data.get('password')
confirm_password = cleaned_data.get('confirm_password')
if confirm_password != password:
self.add_error('confirm_password', 'Password does not match.')
return cleaned_data
这里我们详细的看一下重写后的clean方法。
这里只是添加一个验证的规则而已,原有的验证工作也是需要做的。
所以该方法第一行先调用父类的clean方法进行原有的基础验证,
然后从cleaned_data中分别取password和confirm_password这两个字段的值,进行比较。
如果比较发现这两个值不一致,此时需要报错。
这里有两种报错方式:
- 抛出
ValidationError异常:raise forms.ValidationError("Password does not match.") - 使用
add_error方法添加异常:self.add_error('confirm_password', 'Password does not match.')
这里推荐使用第二种,上面的例子中也用的这一种。使用该方式可以展示多个报错,而不是只能展示第一个报错。
Django笔记&教程 6-4 forms进阶操作,重写forms方法的更多相关文章
- Django笔记&教程 总目录
本篇博客只有目录,正文内容在目录章节链接的博客里 除目录本身外,没有链接的章节,说明内容还没开始编辑 本项目笔记仍在不断创作中,还有些内容会根据自身所学不断更新完善 本项目主要为markdwon文档, ...
- Django笔记&教程 6-2 表单(Form)基础操作
Django 自学笔记兼学习教程第6章第2节--表单(Form)基础操作 点击查看教程总目录 1 - 编写表单类 创建新的表单类的代码,一般写到一个专门的forms.py文件中(一般放在对应的app文 ...
- Django笔记&教程 7-3 拓展CBVs(Class-based views)
Django 自学笔记兼学习教程第7章第3节--拓展CBVs(Class-based views) 点击查看教程总目录 一般而言,直接使用原生的Class-based views,能展现的样式和内容是 ...
- Django笔记&教程 5-2 进阶查询——Queryset
Django 自学笔记兼学习教程第5章第2节--进阶查询--Queryset 点击查看教程总目录 Queryset相关内容其实蛮多的,本文只介绍一些常用的,详细的推荐查询官方文档:queryset-a ...
- Django笔记&教程 1-1 一 新建项目
Django 自学笔记兼学习教程第1章第1节--一 新建项目 点击查看教程总目录 1- 命令行新建Django项目 新建项目命令(project_name处为项目名) django-admin sta ...
- Django笔记&教程 3-1 模板(Template)基础
Django 自学笔记兼学习教程第3章第1节--模板(Template)基础 点击查看教程总目录 1 介绍 模板文件:让Django能够自动生成html代码 作为一个web框架,Django需要需要在 ...
- Django笔记&教程 5-1 基础增删查改
Django 自学笔记兼学习教程第5章第1节--基础增删查改 点击查看教程总目录 第四章介绍了模型类models.Model和创建模型,相当于介绍了数据库表和如何创建数据库表. 这一章将介绍如何使用模 ...
- Django笔记&教程 6-1 表单(Form)介绍
Django 自学笔记兼学习教程第6章第1节--表单(Form)介绍 点击查看教程总目录 1 介绍 如果网站要让用户输入并提交数据(比如注册登录),则需要用到表单. 单纯的html也能写出表单,格式一 ...
- Django笔记&教程 6-3 使用模型(models)创建表单(form)
Django 自学笔记兼学习教程第6章第3节--使用模型(models)创建表单(form) 点击查看教程总目录 本文参考:Forms for models 1 - 初步介绍 很多时候,我们使用的表单 ...
随机推荐
- excel模板数据填充 :tablefill
背景(问题) 在Web后台系统中或多或少都存在导入数据的功能,其中操作流程基本是 1.下载模板 2.填充模板数据 3.上传模板 但通常比较耗费时间的是填充模板数据这一步骤, 已自己为例之前的数据要么是 ...
- Java集合——List,Set,Map总结笔记
1. 集合 Collection 1.1 Java 集合框架 Java 集合框架位于 java.util 包中.Java 集合框架主要包括两种类型的容器,一种是集合(C ...
- 算法——快速排序迭代式和递归式的Java实现
快速排序迭代式和递归式的Java实现 快速排序基于分治法的思想,在待排序表中任选一值作为中枢值 pivot,一趟快排将所有大于该值的元素置于一边,小于该值的元素置于另一边,这样一个元素在排序中的最终位 ...
- WEB 标准以及 W3C 的理解与认识
01. WEB标准 ① web标准 简单来说可以分为结构.表现和行为. ② 结构:主要是有HTML标签组成(通俗点说,在页面body里面我们写入的标签都是为了页面的结构) 表现:即指css样 ...
- ArcPy获取栅格属性
获取栅格属性 (数据管理) 描述 从元数据和栅格数据集的相关描述性统计数据中检索信息. 使用方法 返回的属性将显示在结果窗口中. 此工具的 Python 结果是地理处理结果对象.要获取字符串值,请使用 ...
- DM8数据库单机安装
一.系统概要 表1 部署情况一览表 操作系统 Windows10 数据库版本 DM8(开发版) 数据库类型 单机 磁盘挂载 无 Key信息 无 二.操作系统信息检查 2.1 操作系统版本 [root@ ...
- 技术博客——微信小程序UI的设计与美化
技术博客--微信小程序UI的设计与美化 在alpha阶段的开发过后,我们的小程序也上线了.看到自己努力之后的成果大家都很开心,但对比已有的表情包小程序,我们的界面还有很大的提升空间,许多的界面都是各个 ...
- 攻防世界 web2.robots
输入ip/robots.txt,显示出了flag目录,直接访问.
- vim 删除 替换
1,删除包含pattern的某一行 :g/pattern/d 或 :%g/pattern/d 2,删除不包含pattern的某一行 :v/pattern/d 或 :g!/pattern/d 3,替换 ...
- 深入理解 Linux的进程,线程,PID,LWP,TID,TGID
转载:https://www.linuxidc.com/Linux/2019-03/157819.htm 在Linux的top和ps命令中,默认看到最多的是pid (process ID),也许你也能 ...