******************************* 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. Linux I/O复用 —— epoll 部分源码剖析

    epoll 相关的系统调用有以下三个,这里简述下当调用对应函数后,内核的具体实现 epoll_creat( ) 在内核注册文件系统 eventpollfs,挂载此文件系统 (linux一切皆文件,便于 ...

  2. vue JS实现监听浏览器返回按键事件

    // 这个是监听浏览器回退键的returnButton () { let vm = this; $(document).ready(function () { if (window.history & ...

  3. Selenium多层级的iframe中元素的定位

    很多时候我们遇到多层级的iframe就会想各种方法去获取iframe中的元素,但其实很简单就可以做到的,就是一级一级获取就可以了,获取至你需要的那个层级即可,下面看下实际的案例:(转) <fra ...

  4. mysql数据库终端上的增删改查及权限等相关操作

    ctrl + c 终止 [linux] service mysql start 启动mysql service mysql stop 停止mysql service mysql restart 重启m ...

  5. C语言之修改常量

    前言:指针!菜鸟的终点,高手的起点.漫谈一些进阶之路上的趣事:记录一些语言本身的特性以及思想,没有STL,也没有API! 0x01: 程序内存中的存储划分 对于程序在内存中是如何分布的,网上有多个解释 ...

  6. 删除排序数组中的重复项II

    Given a sorted array nums, remove the duplicates in-place such that duplicates appeared at most twic ...

  7. Vue-Property-Decorator源码分析

    概述 vue-property-decorator是基于vue组织里vue-class-component所做的拓展,先来了解一下vue-class-component Vue-Class-Compo ...

  8. 【数据结构】之顺序表(C语言描述)

    顺序表是线性表的一种,它将元素存储在一段连续的内存空间中,表中的任意元素都可以通过下标快速的获取到,因此,顺序表适合查询操作频繁的场景,而不适合增删操作频繁的场景. 下面是使用 C语言 编写的顺序表的 ...

  9. 【Flask系列】开发一个简单的Flask程序

    知识点 初始化:每一个flask程序都必须创建一个程序实例,遵循WSGI(Web Server Gateway interface)协议,把请求->flask Obj; 创建实例: app = ...

  10. 基于Quartz.NET框架的任务计划管理工具

    最近接到一个小需求 ——可以定期同步20个Sql Server 7.0数据库里的数据(数据量会预计>10000),并保存为CSV格式文件 ——可以设置保存文件数据量 ——该应用需要用WinFor ...