Django form表单功能的引用(注册,复写form.clean方法 增加 验证密码功能)
1. 在app下 新建 forms.py
定义表单内容,类型models
from django import forms class RegisterForm(forms.Form):
username = forms.CharField(label='用户名', max_length=20) # CharField 对应 html的 input type=text name= 前面的username ,label 对应lable
password = forms.CharField(label='密码',
max_length=12,
min_length=6,
widget=forms.PasswordInput(attrs={'placehodler': # 密码类型的 input
'请输入长度为6-12位的密码'}),
error_messages={ # 定义错误信息 和上面的属性对应.
'min_length': '密码长度小于6位',
'max_length': '密码长度大于12位'
})
password_repeat = forms.CharField(label='再次输入密码', widget=forms.PasswordInput())
email = forms.EmailField()
2. 定义视图,实例化form表单,传到前端
from teatcher.forms import RegisterForm # 导入 自定义form def register(request):
if request.method == 'GET':
form = RegisterForm() # 实例化
return render(request, 'register.html',context={'form': form}) #传到前端
3. 新增url 及 前端 html模板
<body>
<form action="">
{% csrf_token %}
{{ form }} # 显示 表单 内容. form 和 submit 需要手动添加,不在form(只有字段) 范围内.
<input type="submit" value="提交">
</form>
</body>
<body>
<form action="" method='post'>
{{ form.as_p }} # form.as_p 每一行加 <o>标签
<input type="submit" value="提交">
</form>
</body>
# views.py
def register(request):
if request.method == 'GET':
form = RegisterForm()
#return render(request, 'register.html', context={'form': form}) if request.method=='POST':
form = RegisterForm(request.POST) # 从前端获得了数据, 填充了数据的form 实例
if form.is_valid(): # is_valid()自动判断是否满足 form 定义时的条件.true 验证成功
return HttpRespone('注册成功')
return render(request, 'register.html', context={'form': form}) #如果 上面的条件都不满足(中间没有return )执行这一条
# 上面的 is_valid 方法. 调用了 form.clean方法 验证 数据,默认不验证 二个输入密码的一致性. 在forms.py 中 重写 clean方法.继承父类的功能,增加新功能.
# 1定义form 表单, 2 在view 中注册 3.复写 clean 方法(验证信息) from django import forms class RegisterForm(forms.Form):
username = forms.CharField(label='用户名', max_length=20) # CharField 对应 html的 input type=text name= 前面的username ,label 对应lable
password = forms.CharField(label='密码',
max_length=12,
min_length=6,
widget=forms.PasswordInput(attrs={'placehodler': # 密码类型的 input
'请输入长度为6-12位的密码'}),
error_messages={ # 定义错误信息 和上面的属性对应.
'min_length': '密码长度小于6位',
'max_length': '密码长度大于12位'
})
password_repeat = forms.CharField(label='再次输入密码', widget=forms.PasswordInput())
email = forms.EmailField() def clean(self): # 复写父类的方法
# 调用 is_valid 方法的时候,就会去调用 clean方法
clean_data = super().clean() # 保证父类的 clean方法被执行.要这么写. 父类没有验证信息一致性的功能,以下为验证密码(变量名看上面的属性名)
password = clean_data.get('passwrod') # 父类 处理过的数据中 拿到 pssword 变量
password_repeat = clean_data.get('password_repeat') # 父类 处理过的数据中 拿到 password_repeat 变量
if password != password_repeat:
msg = '密码不一致'
self.add_error('password_repeat', msg) # 给属性加了一个 error信息.

Django form表单功能的引用(注册,复写form.clean方法 增加 验证密码功能)的更多相关文章
- Django框架form表单配合ajax注册
总结一下,其实form组件的主要功能如下: 生成页面可用的HTML标签 对用户提交的数据进行校验 保留上次输入内容 下面是写的登录页面的实例 1:views视图中的代码 # 注册页面 def regi ...
- django自带的用户认证和form表单功能
一.用户认证 1.用户认证方法 1.ajango自带用户认证功能,只需要引入相应的模块就可以使用,但是前提是必须使用ajango自带的auth_user表,并且需要把用户相关信息存放在该表中. 2.引 ...
- 基于form表单 写登陆注册
urls urlpatterns = [ url(r'^admin/', admin.site.urls), # 登录界面url(r'^login/$', views.login,name='logi ...
- django之表多对多建立方式、form组件、钩子函数 08
目录 多对多三种创建方式 1.全自动(用ManyToManyField创建第三张表) 2.纯手写 3.半自动 form组件 引入 form组件的使用 forms组件渲染标签 form表单展示信息 fo ...
- form表单上传附件的几种方法
问题描述:在网页开发过程中,当需要上传附件(图片,音频,视频等)时,常规方法是使用form表单进行提交,这里总结一下form表单提交的几种方法. 参考地址:http://www.cnblogs.com ...
- html5之table嵌入form表单布局(务必注意:table标签必须在form表单内部,不能再form表单外部!)
切记:用table标签来布局form表单元素,table标签必须放在form表单内部,否则可能会出现各种bug 原文地址:https://blog.csdn.net/weixin_43343144/a ...
- django 增加验证邮箱功能
在user文件夹下新建python包,utils 在包内新建文件email_send.py,其中包括验证字符串随机码的产生,数据库的存储和email的发送 # -*- coding: utf-8 -* ...
- form 表单onclick事件 禁止表单form提交
最近遇到一次处理form数据的过滤,采用了button的onclick事件来检查,发现return false后表单仍然提交了. 于是仔细研究了下onclick.onsubmit.submit集合函数 ...
- form表单提交后结果乱码的解决方法
1.产生乱码原因:表单提交使用的method="get",get方式数据都是通过地址栏传输,数据会以iso-8859-1方式传输,因此产生乱码 2.概念:URI: Uniform ...
随机推荐
- 负载均衡中的session保持
什么叫负载均衡中的session保持 当我们需要做负载均衡时,服务端肯定有多台服务器,用户每次请求进来,会根据负载均衡算法被分配到某一台机器上,假设用户需要进行一段连续操作时,在第一台机器登陆后,下一 ...
- Ubuntu14.04+ROS 启动本地摄像头
STEP1安装usb_cam 创建一个工作空间,make一下 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/ catkin_make STEP2下面是安装usb_c ...
- Win8 & WP8.1 轻型数据库
自Win8 和 WP8.1 以来,MS把SQL CE去掉了.为了方便自己的APP升级,减少代码改动量,所以写了个小型的数据库管理,参考WP8.1之前的DataContext. 用时较短,花了几天的时间 ...
- realm清空所有数据库的数据
/* *清空数据库 */ public int clearDatabase() { Realm realm = Realm.getDefaultInstance(); try { realm.begi ...
- 极速认识RSS!
在解释RSS是什么之前,让我先来举个栗子. 大家都能在街道看到许多海报栏.在那里,会贴出各种各样最新的消息,比如哪个系要开讲座了.星期二晚上的电影放什么.二手货转让等 等.只要看一下海报栏,就会对学校 ...
- MySQL完整教程(共8章)
正文 [第一章] 回到顶部 1.1 MySQL学习路线 基础阶段:MySQL数据库的基本操作(增删改查),以及一些高级操作(视图.触发器.函数.存储过程等). 优化阶段:如何提高数据库的效率,如索引, ...
- 部署GlusterFS及Heketi
一.前言及环境 在实践kubernetes的StateFulSet及各种需要持久存储的组件和功能时,通常会用到pv的动态供给,这就需要用到支持此类功能的存储系统了.在各类支持pv动态供给的存储系统中, ...
- python3+2 不换行打印,多用于进度条 process bar
python3 不换行打印,多用于进度条 process bar process = 0 # process bar for i in user: process += 1 print("\ ...
- 分布式 基本理论 CAP
谈及分布式,必然谈到 CAP, CAP 已经是被说烂了的一个 话题, 绕不开, 逃不掉. 而且, 理解起来 会有些吃力. 分布式的CAP理论告诉我们 “任何一个分布式系统都无法同时满足 一致性(Co ...
- springboot学习随笔(二):简单的HelloWorld
接上章搭建好springboot环境后,开始开发入门级HelloWorld 一.构建简单的springboot项目 1.新建项目,选择Spring/Spring Starter Project 2.N ...