django基础之day09,Forms组件在程序中做了哪些事? 校验数据、渲染标签、展示信息
******************************* 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组件在程序中做了哪些事? 校验数据、渲染标签、展示信息的更多相关文章
- 在DevExpress程序中使用PopupContainerEdit和PopupContainer实现数据展示
在一些数据的即时查询场景中,我们可能需要对输入信息进行模糊查询并进行选择,例如在一些文本输入场景,如输入某个站点编码或者设备编码,然后获取符合的列表供用户选择的场景,本篇随笔介绍在DevExpress ...
- 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,局部钩子函数,全 ...
- Django学习之八:forms组件【对form舒心了】
目录 Django forms组件 bound and unbound form instance forms渲染有关 隐藏一个字段,不渲染它 form 校验 form类 ModelForm 利用Mo ...
- django基础篇05-Form验证组件
Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 基本简单的操作: from django im ...
- 微信小程序中使用ECharts 异步加载数据 实现图表
<!--pages/bar/index.wxml--> <view class="container"> <ec-canvas id="my ...
- django基础之day09,手机号校验的规则和代码编写
通过re模块实现手机号码校验的脚本--json老师 import re 通过re模块实现手机号码校验的脚本--json老师 def mobile_validate(value): mobile_re ...
- django基础之day09,多对多创建数据表的三种方式
多对多三种创建方式 1.全自动(用在表关系不复杂的一般情况) class Book(models.Model): title=models.CharField(max_length=32) 多对多关系 ...
- 卷积神经网络 cnnff.m程序 中的前向传播算法 数据 分步解析
最近在学习卷积神经网络,哎,真的是一头雾水!最后决定从阅读CNN程序下手! 程序来源于GitHub的DeepLearnToolbox 由于确实缺乏理论基础,所以,先从程序的数据流入手,虽然对高手来讲, ...
- 小程序中通过判断id来删除数据,当数据长度为0时,显示隐藏部分(交流QQ群:604788754)
欢迎加入小程序交流群:本群定期更新在工作种遇到的小知识(交流QQ群:604788754) WXML: <!--遍历循环的数据部分--> <block wx:for="{{d ...
随机推荐
- mybatis精讲(三)--标签及TypeHandler使用
目录 话引 XML配置标签 概览 properties 子标签property resource 程序注入 settings 别名 TypeHandler 自定义TypeHandler EnumTyp ...
- 在SQL Server数据库中执行存储过程很快,在c#中调用很慢的问题
记录工作中遇到的问题,分享出来: 原博客地址:https://blog.csdn.net/weixin_40782680/article/details/85038281 今天遇到一个比较郁闷的问题, ...
- 记一次Pod中java进程内存“异常”消耗
背景 环境:openshift3.11 开发反映部署在容器中的java应用内存持续增长,只升不降,具体为: java应用部署在容器中,配置的jvm参数为-Xms1024m -Xmx1024m,容器me ...
- 一篇文章搞定Python多进程(全)
1.Python多进程模块 Python中的多进程是通过multiprocessing包来实现的,和多线程的threading.Thread差不多,它可以利用multiprocessing.Proce ...
- scrapy抓取国家社科基金项目数据库
1.明确任务 目标网站:http://fz.people.com.cn/skygb/sk/index.php/Index/seach 抓取任务:抓取近五年某关键词(例如"能源".” ...
- yum运行报错:/usr/lib64/python2.7/site-packages/pycurl.so: undefined symbol: CRYPTO_num_locks
是因为yum动态库使用了新安装libcurl库导致的.使用ldd查看动态库依赖关系: ldd /usr/lib64/python2.7/site-packages/pycurl.so 删除动态库配置中 ...
- 自定制页面跳转时携带原搜索参数的URL
介绍 django自带反向解析生成URL的功能,目的是避免硬编码,较少代码维护的代价. 前端页面使用模板语法,如:{% url "rbac: request menu_list" ...
- 10-kubernetes serveraccount RBAC
目录 认证安全 serviceAccountName 和 userAccount serviceaccount 创建 使用admin 的SA 测试 URL访问kubernetes资源 APIserve ...
- 链表-C语言实现
链式存储线性表的结构体: typedef int ElemType; //元素类型 typedef struct Node //链表结构体 { ElemType date; //链表结点数据域 str ...
- shell 点命令和source指令
1 shell脚本执行方法 有两种方法执行shell scripts,一种是新产生一个shell,然后执行相应的shell scripts:一种是在当前shell下执行,不再启用其他shell.新产生 ...