******************************* Forms组件 ***************************************************
Forms组件在程序中做了哪些事?
校验数据、渲染标签、展示信息
Forms组件可以做的事情的详细步骤:
1.用户请求数据的验证
2.自动生成错误信息
3.打包用户提交的正确信息
4.如果其中有一个错误了,其他的正确,保留上次输入的内容,保证输入框中的数据不会清空
5.自动创建input标签并可以设置样式 forms组件:
前戏需求:
1.写一个注册页面,获取用户输入的用户名和密码,
数据提交到后端之后,后端需要对用户名和密码做校验,
用户名里面不能含有 挺差的,其次密码不能小于3位,如果不符合,展示对应的错误信息。 自己通过render的方式给前端页面渲染了对应的数据,实现了前戏需求,
思路是:
1.手动书写html代码获取用户输入
2.将数据提交给后端做数据校验
3.如果数据有错误,把错误信息返回到前端页面 urls.py文件 from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^register/', views.register), ] views.py文件 def register(request):
message={'username':'','password':''}
if request.method == 'POST':
#注意请求的方式上必须要大写才可以
username=request.POST.get('username')
password=request.POST.get('password')
if '挺差的' in username:
message['username']='不符合规范'
if len(password) < 3:
message['password'] = '太短了不够长,给你退回去了' return render(request,'register.html',locals()) register.html文件 <form action="" method="post">
<p>
username:
<input type="text" name="username">
<span style="color:red">{{ message.username }}</span>
</p>
<p>
password:
<input type="text" name="password">
<span style="color:red">{{ message.password }}</span>
</p>
<input type="submit"> </form> 上述的需求完成以后,但是漏洞比较多,
最重要的两条如下:
1.输入不规范以后,所有内容全部清空
2.输入框中校验的敏感词汇比较多,需要定义一个列表,查看输入的内容是否在该列表中,查询速度慢 **************************************************************************************
forms组件完善上面的功能:
#使用forms组件,完成数据校验,展示错误信息
#使用forms组件的前提是,你需要提前写一个类
创建forms组件:
from django import forms class MyForm(forms.Form):
# username字段,最少三位,最多八位
username = forms.CharField(max_length=8, min_length=3, label='用户名',
error_messages={
'max_length':'用户名最长八位',
'min_length':'用户名最少三位',
'required':'用户名不能为空',
}
)
# password字段,最少三位,最多八位
password = forms.CharField(max_length=8, min_length=3, label='密码',
error_messages={
'max_length':'密码最多8位',
'min_length':'密码最少3位',
'required':'密码不能为空'
}
)
# email字段,必须是邮箱格式
email = forms.EmailField(label='邮箱',error_messages={
'required':'邮箱不能为空', #required,校验不能为空的固定用法
'invalid':'邮箱格式错误', #invalid,专门用来校验邮箱格式错误的固定用法 })
'''
1.label='xxx'是对应的input输入框前面的提示文字
2.error_messages={
'max_length':'密码最多8位',
'min_length':'密码最少3位',
'required':'密码不能为空'
}
这个是固定格式,必填项必须用required也是固定的用法
3.required,校验不能为空的固定用法
4.invalid,专门用来校验邮箱格式错误的固定用法
''' 渲染标签:
第一步,需要生成一个空的forms_obj,MyForm类的对象
第二步,通过locals()和render方法渲染到前端index页面
'''
def index(request):
forms_obj = MyForm()
# 后端如何校验前端用户传入的数据
if request.method == 'POST': #获取用户的数据,request.POST正好是一个字典,
#request.POST作为该类的参数传入MyForm()类中,
#然后再交给Forms组件来校验数据
#注意事项,这两个forms_obj对象必须要书写一致
forms_obj=MyForm(request.POST)
if forms_obj.is_valid():
print(forms_obj.cleaned_data) #打印成功的数据
return HttpResponse('数据全部OK') else:
print(forms_obj.errors) #打印错误的数据 '''
获取用户的数据 request.POST正好是一个字典
检验数据神6条中的第二条:
2.给写好的类,传字典数据(代校验的数据,生成一个代校验对象)
form_obj=views.MyForm({'username':'jason','password':123,'email':'123@'}) ''' # for forms in forms_obj:
# print('我是',forms)
'''
forms 相关打印结果:
我是 < input
type = "text"
name = "username"
maxlength = "8"
minlength = "3"
required
id = "id_username" / >
''' #{{ forms.label }}是标签前面的注释,举例:input输入框前面的用户名,密码,年龄这些文字提示
#{{ forms }} 是表单中所有的输入框
#{{ forms.errors.0 }} 是固定用法,获取表单提交中的错误字段详细信息,咱后端或者前端页面都可以查看 # 直接将生成的对象,传递给前端页面
return render(request, 'index.html', locals()) 渲染标签和展示信息
如何高速浏览器不做校验,form表单中加一个 novalidate 参数即可
<p>forms组件渲染标签和展示信息 </p>
<form action="" method="post" novalidate>
{% for forms in form_obj %}
<p>
{{ forms.label }}{{ forms }} #渲染标签
<span>{{ forms.errors.0 }}</span> #展示错误的提示信息
</p> <!--form 等价于你方式2中的对象点字段名-->
{% endfor %}
<input type="submit">
</form> 检验数据神6条:
1.通过Python解释器中的Python Console,导入MyForm类
from app01 import views 2.给写好的类,传字典数据(代校验的数据,生成一个代校验对象)
form_obj=views.MyForm({'username':'jason','password':123,'email':'123@'}) 3.查看校验数据是否合法
form_obj.is_valid()
返回TRUE或者FALSE,FALSE代表数据中有错误 4.如何查看不符合规则的字段和错误的原因
form_obj.errors
返回错误信息在控制台:
{
'email':['Enter a valid email address']
} 5.如何查看符合校验规则的数据
form_obj.cleaned_date
返回符合规则的数据:
{
'username':'jason',
'password':123
} 6.forms组件中,定义的字段默认都是必须要传值的,
注意事项,重要规则,传入的数据中属于我自己的东西,少一个也不行,
不属于我的东西,多给我我也不会要。 form_obj = views.MyForm({'username':'jason','password':'12345','email':'123@qq.com','xxx':'嘿嘿嘿'})
form_obj.is_valid()
True {% for forms in forms_obj %} <p>{{ forms.label }}:{{ forms }}</p>
<span>{{ forms.errors.0 }}</span>
<span>{{ forms.label }}</span>
<span>{{ forms }}</span> #{{ forms.label }}是标签前面的注释,举例:input输入框前面的用户名,密码,年龄这些文字提示
#{{ forms }} 是表单中所有的输入框
#{{ forms.errors.0 }} 是固定用法,获取表单提交中的错误字段详细信息,咱后端或者前端页面都可以查看 {% endfor %}

django基础之day09,Forms组件在程序中做了哪些事? 校验数据、渲染标签、展示信息的更多相关文章

  1. 在DevExpress程序中使用PopupContainerEdit和PopupContainer实现数据展示

    在一些数据的即时查询场景中,我们可能需要对输入信息进行模糊查询并进行选择,例如在一些文本输入场景,如输入某个站点编码或者设备编码,然后获取符合的列表供用户选择的场景,本篇随笔介绍在DevExpress ...

  2. django基础之day09,创建一个forms表单组件进行表单校验,知识点:error_messages,label,required,invalid,局部钩子函数,全局钩子函数, forms_obj.cleaned_data,forms_obj.errors,locals(), {{ forms.label }}:{{ forms }},{{ forms.errors.0 }}

    利用forms表单组件进行表单校验,完成用户名,密码,确认密码,邮箱功能的校验 该作业包含了下面的知识点: error_messages,label,required,invalid,局部钩子函数,全 ...

  3. Django学习之八:forms组件【对form舒心了】

    目录 Django forms组件 bound and unbound form instance forms渲染有关 隐藏一个字段,不渲染它 form 校验 form类 ModelForm 利用Mo ...

  4. django基础篇05-Form验证组件

    Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 基本简单的操作: from django im ...

  5. 微信小程序中使用ECharts 异步加载数据 实现图表

    <!--pages/bar/index.wxml--> <view class="container"> <ec-canvas id="my ...

  6. django基础之day09,手机号校验的规则和代码编写

    通过re模块实现手机号码校验的脚本--json老师 import re 通过re模块实现手机号码校验的脚本--json老师 def mobile_validate(value): mobile_re ...

  7. django基础之day09,多对多创建数据表的三种方式

    多对多三种创建方式 1.全自动(用在表关系不复杂的一般情况) class Book(models.Model): title=models.CharField(max_length=32) 多对多关系 ...

  8. 卷积神经网络 cnnff.m程序 中的前向传播算法 数据 分步解析

    最近在学习卷积神经网络,哎,真的是一头雾水!最后决定从阅读CNN程序下手! 程序来源于GitHub的DeepLearnToolbox 由于确实缺乏理论基础,所以,先从程序的数据流入手,虽然对高手来讲, ...

  9. 小程序中通过判断id来删除数据,当数据长度为0时,显示隐藏部分(交流QQ群:604788754)

    欢迎加入小程序交流群:本群定期更新在工作种遇到的小知识(交流QQ群:604788754) WXML: <!--遍历循环的数据部分--> <block wx:for="{{d ...

随机推荐

  1. iOS 抽奖轮盘效果实现思路

    临近活动,相信不少app都会加一个新的需求——抽奖不多废话,先上GIF效果图 作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要这是一个我的iOS交流群:937194184,不管你是小白还是大牛欢 ...

  2. Three.js - 走进3D的奇妙世界

    本文将通过Three.js的介绍及示例带我们走进3D的奇妙世界. 文章来源:宜信技术学院 & 宜信支付结算团队技术分享第6期-支付结算部支付研发团队前端研发高级工程师-刘琳<three. ...

  3. Navicat Premium 12连接ubuntu18 ,Mysql 5.7.27-0

    1,搭建好mysql服务器,cd  /etc/mysql/mysql.conf.d,进入mysql配置目录,vim mysqld.cnf 2,注释掉,bind-address =127.0.0.1 , ...

  4. jquery对类的操作,添加,删除,点击添加,再点击删除

    jquery对类的操作,添加(addClass),删除l类(remoceClass),点击添加,再点击删除(toggleClass)

  5. 解密面试中的套路,你都get到了么?

    如果大家有关注一些测试类的公众号或者论坛的话,肯定会发现很多文章都在表示现在行业的寒冬冷潮来了!然后有很多测试行业从业者,或者转行测试行业者都表示:工作好难找,公司跑了千千万,依然拿不到一个offer ...

  6. Win10 SQLServer 未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序

    环境:Win10+SQLServer2014 场景:在SQLServer导入Excel时,选择Excel2007格式,提示:未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供 ...

  7. 记一次MySQL数据库导入错误

    昨天在转数据的时候,控制台报出了下面这个warning: Warning: Data truncated for column '控制距离' at row 1 字面上意思应该是:控制距离这一字段在第一 ...

  8. Python模块——loguru日志模块简单学习

    Python loguru模块简单学习 首先安装模块:pip install logoru,然后引入模块: from loguru import logger 1.直接输出到console logge ...

  9. Laravel 中使用 swoole 项目实战开发案例一 (建立 swoole 和前端通信)

    1 开发需要环境 工欲善其事,必先利其器.在正式开发之前我们检查好需要安装的拓展,不要开发中发现这些问题,打断思路影响我们的开发效率. 安装 swoole 拓展包 安装 redis 拓展包 安装 la ...

  10. LVS+Keepalived-DR模式(Apache)

    Environment:4台CentOS机器 两台LVS 两台web服务器 LVS主备的操作,都需要安装ipvsadm和keepalived LVS主机操作 : 1.更改Keepalived的配置文件 ...