******************************* 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. nexus https proxy

  2. Alibaba Nacos 学习(二):Spring Cloud Nacos Config

    Alibaba Nacos 学习(一):Nacos介绍与安装 Alibaba Nacos 学习(二):Spring Cloud Nacos Config Alibaba Nacos 学习(三):Spr ...

  3. 读取FANUC进给倍率

    读取FANUC机床的倍率信息需要用到 FOCAS链接库. 根据FANUC的连接手册可以知道,进给倍率信号存在 Gn012寄存器中.在机床上更改倍率开关,发现G0012寄存器值变化,经验证G0012就是 ...

  4. 2019-10-11:渗透测试,基础学习,php+mysql连接,笔记

    mysql导出数据1,通过工具如phpmyadmin,navicat等2,mysqldump -u -p 库名 > /数据库文件, mysqldump -u -p 库名 表名 > /表数据 ...

  5. tar文件归档

    tar是UNIX和类UNIX系统上的压缩,备份工具, 名字来源于Tape archive--磁盘归档,最初的时候是用来将数据储存,备份到磁带上的.而今最简单的备份方法是添加新的磁盘或者在云端存储,但即 ...

  6. linuxRAID(软)

    RAID是一种存储机制,英文全名为“RedundantArrays of Inexpensive Disks”,即容错廉价磁盘阵列.RAID可以通过一些技术(硬件或者软件)将多个磁盘整合起来,不仅是一 ...

  7. 五分钟了解物联网SIM卡 | 我的物联网成长记10

    [摘要] SIM卡是移动通信中不可或缺的组成部分,在物联网解决方案中,设备移动上网也需要使用SIM卡.那么,SIM卡是什么?SIM卡有几种?各种SIM卡有什么区别?本文将为您答疑解惑. 通信进化史 过 ...

  8. 01-tornado练习-tornado简介

    # coding = utf-8 """ 启动一个tornado的web服务 """ import tornado.web from tor ...

  9. Java 理论与实践: 处理 InterruptedException【转】

    这样的情景您也许并不陌生:您在编写一个测试程序,程序需要暂停一段时间,于是调用Thread.sleep().但是编译器或 IDE 报错说没有处理检查到的InterruptedException.Int ...

  10. xpath-房价爬取

    xpath xpath两种使用方式 和bs类似,一种是调用本地资源,一种是网络资源 etree.parse(filePath) etree.HTML('page_text') xpath表达式 层级: ...