******************************* 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. proxy protocol

    Proxy protocol 是haproxy 作者开发和设计的一个inernet 协议, 用于获取客户端的IP地址. 在使用7层代理是可以向http协议添加X-Forword-For来实现,而4层协 ...

  2. 攻防世界 4-ReeHY-main

    检查保护机制: 发现  可以好像写got 然后 程序流程 这里  有double free 然后 再发现 这里很有趣 ,要是我的content为零了 且size 小于112 那就从栈上copy一些内容 ...

  3. 2019-9-25:渗透测试,基础学习,medusa爆破学习

    Medusa(美杜莎)暴力破解使用 该文章仅供学习,利用方法来自网络文章,仅供参考 一.简介 medusa(美杜莎)是一个速度快,支持大规模并行,模块化,爆破登陆,可以同时对多个主机,用户或是密码执行 ...

  4. Theano 更多示例

    Logistic函数 logistic函数的图,其中x在x轴上,s(x)在y轴上. 如果你想对双精度矩阵上的每个元素计算这个函数,这表示你想将这个函数应用到矩阵的每个元素上. 嗯,你是这样做的: x= ...

  5. 探索 Reflect.apply 与 Function.prototype.apply 的区别

    探索 Reflect.apply 与 Function.prototype.apply 的区别 众所周知, ES6 新增了一个全局.内建.不可构造的 Reflect 对象,并提供了其下一系列可被拦截的 ...

  6. EntityFramework Core 3多次Include导致查询性能低之解决方案

    前言 上述我们简单讲解了几个小问题,这节我们再来看看如标题EF Core中多次Include导致出现性能的问题,废话少说,直接开门见山. EntityFramework Core 3多次Include ...

  7. 为什么服务器突然回复RST——小心网络中的安全设备

    RST产生原因 一般情况下导致TCP发送RST报文的原因有如下3种:    1. SYN数据段指定的目的端口处没有接收进程在等待.        2.TCP想放弃一个已经存在的连接.    3.TCP ...

  8. centos7安装fail2ban

    fail2ban是一款非常实用的安全软件,通过监视系统日志,设置错误登陆次数,可阻挡暴力密码攻击. 1.安装epelyum install epel-release -y 2.安装fail2banyu ...

  9. css关于控制div靠左或靠右的排版布局

    关于控制div靠左或靠右的排版布局,我整理三种平时用到的css属性小知识(元素模块靠左或靠右排版): 1.float属性(float 属性定义元素在哪个方向浮动) 值:left(元素向左浮动).rig ...

  10. c语言l博客作业08

    问题 答案 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-2/homework/8655 我在 ...