(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 ...
随机推荐
- react-router 4.0(四)跳转404
import React from 'react' import ReactDOM from 'react-dom' import { HashRouter, Route, Link, Prompt, ...
- Learning-Python【31】:操作系统基础知识
什么是操作系统 计算机系统由硬件和软件两部分组成.操作系统(OS,Operating System)是配置在计算机硬件上的第一层软件,是对硬件系统的首次扩充.它在计算机系统中占据了特别重要的地位:而其 ...
- A - 不要62 HDU - 2089
#include<stdio.h> #include<string.h> #include<math.h> #include<time.h> #incl ...
- loadrunner中web_reg_save_param和web_reg_save_param_ex的区别
在使用Loadrunner进行性能测试,编写接口请求脚本时,通过会用到关联函数,而web_reg_save_param和web_reg_save_param_ex的函数有什么区别呢?以下为总结的两点, ...
- Redhat中关于httpd仓库安装的简要步骤
创建repo-server: yum install httpd yum install httpd -y < -y 表示在安装过程中与界面交互时自动答复yes >sys ...
- https 适配
1info plist <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryL ...
- js创建对象的三种方法
1.使用对象初始化器:{} var person = {....} 2 var person=new object() function person(参数) { this.参数=... } var ...
- android:Internet(volley)
public void getStringFromCloud(View view) { /*创建请求队列*/ RequestQueue queue = Volley.newRequestQueue(t ...
- LeetCode(3):无重复字符的最长子串
Medium! 题目描述: 给定一个字符串,找出不含有重复字符的 最长子串 的长度. 示例: 给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ...
- virtural machine eth1
DEVICE=eth1HWADDR=00:50:56:33:EF:21TYPE=EthernetUUID=f35bd21c-9636-4e3f-a05c-bd4382c352bfONBOOT=yesN ...