(32)forms组件(数据校验)
forms组件的用处
1、就是用来做数据校验的
2、渲染页面
3、渲染错误信息(和局部刷新同效果)
数据校验
要使用forms组件必须要写一个类继承forms组件
urls.py
from bbs01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'register/$',views.RegForms.register),
]
views.py
from django.shortcuts import render,HttpResponse
from django import forms #导入forms组件 class RegForms(forms.Form):
'''写要校验的字段'''
name = forms.CharField(min_length=3,max_length=8) #forms.CharField()这是一个对象,就是用这个对象来校验name,最小长度3,最大长度8
pwd = forms.CharField(min_length=3,max_length=8)
re_pwd = forms.CharField(min_length=3,max_length=8)
email = forms.EmailField() #这个对象校验的必须是email格式
'''如果前端多传的字段,则再这里后端不会校验,多传的字段会被清洗掉
如果少传了,则会不通过校验
''' def register(request):
if request.method == 'GET':
return render(request,'register.html')
elif request.method == 'POST':
'''生成一个forms对象,传入一个字典'''
forms = RegForms(request.POST) #要检验数据的话,就要在实例化时候传入对象
'''调用forms对象'''
if forms.is_valid(): #调用is_valid校验,合法就是返回True,不合法就是返回False
'''cleaned_data清洗后的数据,就是通过的数据都存在这里面,是一个字典'''
print('这里就是清洗后的数据: ',forms.cleaned_data)
else:
'''errors也是一个字典,错误的数据放这里面'''
errors_dic = forms.errors
print(errors_dic) #这个列表是底层做过处理和拼接的,有点难看懂
print('这里就是错误的数据: ',forms.errors.as_data) #要查看这个错误的信息字典,要用errors.data,这样就可以看懂 return HttpResponse('。。。。。。。。。。。。。')
register.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册页面</title>
</head>
<body>
<form action="" method="post">
{% csrf_token %}
<p>用户名:<input type="text" name="name"></p>
<p>密码: <input type="password" name="pwd"></p>
<p>确认密码: <input type="password" name="re_pwd"></p>
<p>email: <input type="text" name="email"></p>
<p>xxx: <input type="text" name="xxx"></p>
<input type="submit" value="提交">
</form>
</body>
</html>
渲染页面
渲染页面第一种方式
urls.py
from bbs01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'register/$',views.RegForms.register),
]
views.py
from django.shortcuts import render,HttpResponse
from django import forms #导入forms组件 class RegForms(forms.Form):
'''写要校验的字段'''
name = forms.CharField(min_length=3,max_length=8) #forms.CharField()这是一个对象,就是用这个对象来校验name,最小长度3,最大长度8
pwd = forms.CharField(min_length=3,max_length=8)
re_pwd = forms.CharField(min_length=3,max_length=8)
email = forms.EmailField() #这个对象校验的必须是email格式 def register(request):
if request.method == 'GET':
return render(request,'register.html')
elif request.method == 'POST':
'''生成一个forms对象,传入一个字典'''
forms = RegForms(request.POST) #要检验数据的话,就要在实例化时候传入对象
'''调用forms对象'''
if forms.is_valid(): #调用is_valid校验,合法就是返回True,不合法就是返回False
'''cleaned_data清洗后的数据,就是通过的数据都存在这里面,是一个字典'''
print('这里就是清洗后的数据: ',forms.cleaned_data)
else:
'''errors也是一个字典,错误的数据放这里面'''
errors_dic = forms.errors
print(errors_dic) #这个列表是底层做过处理和拼接的,有点难看懂
print('这里就是错误的数据: ',forms.errors.as_data) #要查看这个错误的信息字典,要用errors.data,这样就可以看懂 return HttpResponse('。。。。。。。。。。。。。')
register.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册页面</title>
</head>
<body>
<h1>渲染页面的第一种方式</h1>
<h5>自动生成用户登陆的界面</h5>
<form action="" method="post">
{% csrf_token %}
<p>用户名:{{ forms.name }}</p>
<p>密码: {{ forms.pwd }}</p>
<p>确认密码: {{ forms.re_pwd }}</p>
<p>email: {{ forms.email }}</p>
<input type="submit" value="提交">
</form>
</body>
</html>
渲染页面的第二种方式 forms循环的方式 (推荐这种方式,代码量少,可控性高)
urls.py
from bbs01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'register/$',views.RegForms.register),
]
views.py
from django.shortcuts import render,HttpResponse from django import forms
class RegForms(forms.Form):
'''渲染页面的第二种方式,这里后面的参数要传一个lable,就是将name在前端显示中文名,不设定lable则默认用变量名'''
name = forms.CharField(min_length=3,max_length=8,label='用户名')
pwd = forms.CharField(min_length=3,max_length=8,label='密码')
re_pwd = forms.CharField(min_length=3,max_length=8,label='确认密码')
email = forms.EmailField(label='邮箱') def register(request):
if request.method == 'GET':
forms = RegForms()
return render(request,'register.html',{'forms':forms})
elif request.method == 'POST':
forms = RegForms(request.POST)
if forms.is_valid():
print('这里就是清洗后的数据: ',forms.cleaned_data)
else:
errors_dic = forms.errors
print(errors_dic)
print('这里就是错误的数据: ',forms.errors.as_data) return HttpResponse('。。。。。。。。。。。。。')
register.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册页面</title>
</head>
<body>
<h1>渲染页面的第二种方式</h1>
<form action="" method="post">
{% csrf_token %}
{% for form in forms %}
{#这里从后端取输入框对应的名字用lable#}
<p>{{ form.label }}:{{ form }}</p>
{% endfor %}
</form>
</body>
</html>
渲染错误信息
PS:每一个对象里面都有一个errors错误信息
register.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册页面</title>
<style>
.errors {
color: red;
margin-left: 20px;
}
</style>
</head>
<body>
<h1>forms渲染页面,实现局部刷新</h1>
<form action="" method="post" novalidate>
{% csrf_token %}
{% for form in forms %}
{#每一个对象中都有一个错误信息,这去对象中的errors就是获得对象的错误信息,然后取0就是最近的一个,这样不会换行,否则程序会自动将错误信息放入li列表中换行#}
<p>{{ form.label }}:{{ form }}<span class="errors">{{ form.errors.0 }}</span></p>
{% endfor %}
<input type="submit" value="提交">
</form>
</body>
</html>
views.py
from django.shortcuts import render,HttpResponse from django import forms class RegForms(forms.Form):
'''渲染页面的错误信息是中文,这里要传入一个字典,设定参数对应的显示值'''
name = forms.CharField(min_length=3,max_length=8,label='用户名',error_messages={'min_length':'用户名太短','max_length': '用户名太长了','required':'该字段必填'})
pwd = forms.CharField(min_length=3,max_length=8,label='密码',error_messages={'min_length':'用户名太短','max_length': '用户名太长了','required':'该字段必填'})
re_pwd = forms.CharField(min_length=3,max_length=8,label='确认密码',error_messages={'min_length':'用户名太短','max_length': '用户名太长了','required':'该字段必填'})
email = forms.EmailField(label='邮箱',error_messages={'invalid':'格式不是邮箱格式','required':'该字段必填'}) def register(request):
if request.method == 'GET':
forms = RegForms()
elif request.method == 'POST':
forms = RegForms(request.POST)
if forms.is_valid():
print('这里就是清洗后的数据: ',forms.cleaned_data)
return HttpResponse('注册成功')
else:
errors_dic = forms.errors
print(errors_dic)
print('这里就是错误的数据: ',forms.errors.as_data) return render(request,'register.html',{'forms':forms})
(32)forms组件(数据校验)的更多相关文章
- Django学习——分页器基本使用、分页器终极用法、forms组件之校验字段、forms组件之渲染标签、forms组件全局钩子,局部钩子
内容 1 分页器基本使用 2 分页器终极用法 3 forms组件之校验字段 1 前端 <!DOCTYPE html> <html lang="en"> &l ...
- Django forms组件的校验
引入: from django import forms 使用方法:定义规则,例: class UserForm(forms.Form): name=forms.CharField(max_lengt ...
- Django-多对多关系的三种创建方式-forms组件使用-cookie与session-08
目录 表模型类多对多关系的三种创建方式 django forms 组件 登录功能手写推理过程 整段代码可以放过来 forms 组件使用 forms 后端定义规则并校验结果 forms 前端渲染标签组件 ...
- Django框架(十四)-- forms组件、局部钩子、全局钩子
一.什么是forms组件 forms组件就是一个类,可以检测前端传来的数据,是否合法. 例如,前端传来的邮箱数据,判断邮件格式对不对,用户名中不能以什么开头,等等 二.forms组件的使用 1.使用语 ...
- Django框架(十五)—— forms组件、局部钩子、全局钩子
目录 forms组件.局部钩子.全局钩子 一.什么是forms组件 二.forms组件的使用 1.使用语法 2.组件的参数 3.注意点 三.渲染模板 四.渲染错误信息 五.局部钩子 1.什么是局部钩子 ...
- django基础之day09,Forms组件在程序中做了哪些事? 校验数据、渲染标签、展示信息
******************************* Forms组件 *************************************************** Forms组件在 ...
- Django day26 HyperlinkedIdentityField,序列化组件的数据校验以及功能的(全局,局部)钩子函数,序列化组件的反序列化和保存
一:HyperlinkedIdentityField(用的很少):传三个参数:第一个路由名字,用来反向解析,第二个参数是要反向解析的参数值,第三个参数:有名分组的名字 -1 publish = ser ...
- python 全栈开发,Day78(Django组件-forms组件)
一.Django组件-forms组件 forms组件 django中的Form组件有以下几个功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显 ...
- 03、 forms组件
1.校验字段功能 1.reg页面准备 models from django.db import models class UserInfo(models.Model): useranme = mode ...
- 基于forms组件和Ajax实现注册功能
一.基于forms组件的注册页面设计 1.运用forms组件的校验字段功能实现用户注册 views.py: (在钩子中代码解耦,将form放在cnblog/blog/Myforms.py中) f ...
随机推荐
- (转载)Unity UGUI鼠标点击UI不受影响方法IsPointerOverGameObject
这几天在做捕鱼达人游戏时发现,当鼠标点击UI时,炮台的子弹也会发射子弹,这样会影响用户体验. 然后网上百度了一波,发现在UGUI系统上,EventSystem提供了一些方法.那就是EventSyste ...
- 如何用 python 优雅地完成数据库课设
0 前言 偶然间发现 Google 收录了学校实验打卡系统的接口,正好要做数据库课设,便拿来作为 environment. 机房居然装了 python ,早就听说 python 写爬虫速度一流,课上的 ...
- Windows环境——MySQL安装及配置
Mysql安装 下载地址:https://dev.mysql.com/downloads/mysql/ 根据个人需求,选择对应的操作系统,进行安装,本次安装的版本为5.7.24版本. 1. 安装完成 ...
- 大数据技术之_19_Spark学习_04_Spark Streaming 应用解析 + Spark Streaming 概述、运行、解析 + DStream 的输入、转换、输出 + 优化
第1章 Spark Streaming 概述1.1 什么是 Spark Streaming1.2 为什么要学习 Spark Streaming1.3 Spark 与 Storm 的对比第2章 运行 S ...
- java笔记 -- java变量与常量的声明
变量: 在Java中, 每一个变量属于一种类型. double salary int vacationDays; long earthPopulation; boolean done; 命名: 以字母 ...
- Katy Perry - E.T.
作曲 : Katy Perry, Łukasz Gottwald, Max Martin, Joshua Coleman 作词 : Katy Perry, Łukasz Gottwald, Max M ...
- C++将十进制数转化为二进制
#include<iostream> using namespace std; void main() { ; ]; cin>>n; i=n; while(i) { a[j]= ...
- Win10系列:C#应用控件基础7
Slider控件 Slider控件包含一个滑动条.一个滑动块和一个取值范围,沿滑动条移动滑动块可以在取值范围内改变Slider控件的值.Slider控件的用途很广泛,例如可以使用Slider控件来设置 ...
- windows下《Go Web编程》之Go命令
Go命令: go build 用于编译代码,默认会编译当前目录下的所以go文件.若只需编译某个文件,go build后加上文件名,如go build a.go. go build会忽略目录下以“_”或 ...
- Java库中的集合
集合类型 描述 ArrayList 一种可以动态增长和缩减的索引序列 LinkedList 一种可以在任何位置进行高效的插入和删除操作的有序序列 ArrayDeque 一种用循环数组实现的双端队列 H ...