django12:form 组件/渲染标签/数据校验/钩子函数/

基本用法

from django import forms# 自己写一个类
class RegForm(forms.Form):username= forms.CharField(min_length=3,max_length=8, label="用户名")password = forms.CharField(min_length=3,max_length=8,label="密码")email=forms.EmailField()

 

1.校验数据为字典形式。

2.is_valid():全部数据通过才true;

3. cleaned_data:查看符合校验的数据

4.errors:查看不符合校验的数据,以及不符合原因。

5.多传字段直接忽略。

6.少传错误,默认所有字段必须传值。

 

渲染标签

forms组件只帮你渲染获取用户输入(输入 选择 下拉 文件)的标签 不渲染按钮和form表单标签
渲染出来的每一个input提示信息都是类中字段首字母大写

class MyRegForm(forms.Form):username = forms.CharField(max_length=8, min_length=3,label='用户名')  # 最长8位,最短3位password = forms.CharField(max_length=8, min_length=3)  # 最长8位,最短3位email = forms.EmailField()  # 邮箱验证def reg(request):# 1 先生成一个空的类对象form_obj = MyRegForm()if request.method == 'POST':# 3 获取用户数据并交给forms组件校验  request.POSTform_obj = MyRegForm(request.POST)  #*****全部数据# 4 获取校验结果if form_obj.is_valid():return HttpResponse('数据没问题')else:# 5 获取校验失败的字段和提示信息print(form_obj.errors)# 2 直接将该对象传给前端页面return render(request, 'reg.html', locals())

第一种

<body>
<p>第一种渲染方式:多个p标签  本地测试方便 封装程度太高了 不便于扩展</p>
{{ form_obj.as_p }}
{#{{ form_obj.as_ul }}#}
{#{{ form_obj.as_table }}#}
</body>

第二种

<p>第二种渲染方式:  扩展性较高 书写较为繁琐</p>
<label for="{{ form_obj.username.id_for_label }}">{{ form_obj.username.label }}</label>
{{ form_obj.username }}
{{ form_obj.password.label }}{{ form_obj.password }}
{{ form_obj.email.label }}{{ form_obj.email }}

第三种

推荐使用,for循环方式。也可以用ajax

{{ form.errors.0 }} # 这个是模板语法

<p>第三种渲染方式  推荐使用</p>
<form action="" method="post" novalidate>{% for form in form_obj %}<p>{{ form.label }}{{ form }}<span>{{ form.errors.0 }}</span></p>{% endfor %}<input type="submit">
</form>

数据校验

数据校验一个前后端都得有 但是前端的校验弱不禁风 可有可无
而后端的校验则必须非常全面

form表单取消前端浏览器自动校验功能 <form action="" method="post" novalidate>

notes:

1.必备条件,get请求和post传给html页面对象变量名必须一致。(form_obj)

2,当不合法的时候,也会保存上次数据,方便修改。

 

CharField用户名类型校验

from django.forms import widgets   //不导入也可以,没提示class MyRegForm(forms.Form):# 用户名最少3位最多8位username = forms.CharField(max_length=8,min_length=3,label='用户名',error_messages={     //报错信息的提示'max_length':"用户名最长8位",'min_length':"用户名最短3位",'required':"用户名不能为空"},required=False,initial='jeff',  // 为空和默认值widget=forms.widgets.TextInput(attrs={'class':'form-control c1 c2'}),		//设置input的type属性为text,及class属性)email = forms.EmailField(label='邮箱',error_messages={'required':'邮箱必填','invalid':'邮箱格式不正确'})

 

钩子函数


局部钩子:操作单个字段的数据

全局钩子:操作多个字段的数据

钩子勾回来处理完之后,还要还回去的

 

局部钩子

校验用户名中不能包含666

# 局部钩子
# 这里的self是自己类,MyRegFormdef clean_username(self):username = self.cleaned_data.get('username')if '666' in username:self.add_error('username','光喊666是不行的')  	//添加报错信息return username										//再把数据返回去

全局钩子

前面验证通过才走钩子函数验证。一层一层的验证

两次密码验证-----两个字段

class MyRegForm(forms.Form):# 密码password = forms.CharField(max_length=8,min_length=3,label='密码',widget=forms.widgets.PasswordInput(attrs={'class':'form-control'}))# 密码验证re_password = forms.CharField(max_length=8,min_length=3,label='确认密码',widget=forms.widgets.PasswordInput(attrs={'class':'form-control'}))def clean(self):# 这里的self是自己类,MyRegForm# 校验密码和确认密码是否一致password = self.cleaned_data.get('password')re_password = self.cleaned_data.get('re_password')if not password == re_password:# 展示提示信息self.add_error('re_password','两次密码不一致')   // 添加报错信息return self.cleaned_data

 

form组件其他参数及补充知识点

max_length			//允许输入的最大长度
min_length			//最小长度label    		input的提示信息,name、password等error_messages   	自定义报错的提示信息'max_length':"用户名最长8位",'min_length':"用户名最短3位",'required':"用户名不能为空"required     	设置字段是否允许为空
initial            设置默认值widget             控制type类型及属性   type   classs#多个属性用空格widget=forms.widgets.TextInput(attrs={'class': 'form-control c1 c2'})widget=forms.widgets.PasswordInput()###正则校验及报错信息,并且支持多个validator  			phone = forms.CharField(validators=[RegexValidator(r'^[0-9]+$', '请输入数字'),   RegexValidator(r'^159[0-9]+$', '数字必须以159开头')])

 

其他字段属性

性别校验

    gender = forms.ChoiceField(choices=((1, "男"), (2, "女"), (3, "保密")),label="性别",initial=3,widget=forms.widgets.RadioSelect())

 

爱好单选 select校验

    hobby = forms.ChoiceField(choices=((1, "篮球"), (2, "足球"), (3, "双色球"),),label="爱好",initial=3,widget=forms.widgets.Select()   # 单选)

爱好多选select 校验1

    hobby1 = forms.MultipleChoiceField(choices=((1, "篮球"), (2, "足球"), (3, "双色球"),),label="爱好",initial=[1, 3],widget=forms.widgets.SelectMultiple())

爱好多选chekbox校验2

    hobby2 = forms.MultipleChoiceField(choices=((1, "篮球"), (2, "足球"), (3, "双色球"),),label="爱好",initial=[1, 3],widget=forms.widgets.CheckboxSelectMultiple())

是否记住密码校验

    keep = forms.ChoiceField(label="是否记住密码",initial="checked",widget=forms.widgets.CheckboxInput())

 

 

 

详细请参考:https://www.cnblogs.com/guyouyin123/p/12189453.html

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/280582.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何快速拥有一个 Web IDE

本文将介绍如何使用 2-3 句指令在几分钟内创建一个 Web IDE 环境。服务器准备如何准备服务器可以参考上文 一键体验 Istio&#xff0c;这里只需要一台即可&#xff0c;示例中的服务器 IP 为&#xff1a;43.154.189.116安装 Web IDE下载安装工具在服务器上&#xff0c;执行以下指…

有了防火墙、IPS、WAF 还需要数据库审计?

本文讲的是 有了防火墙、IPS、WAF 还需要数据库审计&#xff1f;&#xff0c;“我们的网络安全系统中已经有了Web应用防火墙、网络防火墙和IPS&#xff0c;难道还需要数据库审计吗&#xff1f;”很多人有这样的疑问&#xff0c;网络中有层层防护&#xff0c;还不能保护数据库的…

20155339 Exp4 恶意代码分析

20155339 Exp4 恶意代码分析 实验后回答问题 &#xff08;1&#xff09;如果在工作中怀疑一台主机上有恶意代码&#xff0c;但只是猜想&#xff0c;所有想监控下系统一天天的到底在干些什么。请设计下你想监控的操作有哪些&#xff0c;用什么方法来监控。 监控网络连接。当某个…

Linux就该这么学---第七章(LVM逻辑卷管理器)

第七章节-LVM技术逻辑卷管理器(LVM,Logical Volume Manager)1.物理卷(PV,physical Volumn)2.卷组(VG,Volume Group)3.逻辑卷(LV,Logical Volume)基本单元[PE,Physical Extent] 物理卷处于LVM中的最底层&#xff0c;可以将其理解为物理硬盘、硬盘分区或者RAID磁盘阵列卷组建立在…

从Windows XP升级? 这是您需要了解的Windows 7

With Windows XP reaching the end of its long support life, many businesses and individuals are avoiding Windows 8 and upgrading to Windows 7 instead. If you’re a latecomer to Windows 7, here are the basics you need to know. 随着Windows XP使用寿命的延长&am…

Java迭代器原理

1迭代器模式 迭代器是一种设计模式&#xff0c;这种模式用于顺序访问集合对象的元素&#xff0c;不需要知道集合对象的底层表示。 一般实现方式如下&#xff1a;&#xff08;来自&#xff09; public interface Iterator {public boolean hasNext();public Object next(); } pu…

企业版Java EE正式易主 甲骨文再次放手

有人说甲骨文收购的东西大多没有了好下场&#xff0c;这么说虽然有些片面&#xff0c;但是最近一个月Java EE和Solaris的境遇难免让人产生类似的联想。 继笔者上次报道《甲骨文将放弃Java EE 开源基金会双手欢迎》之后&#xff0c;最新消息显示&#xff0c;原本在甲骨文手中的J…

js中各种位置

js中各种位置 js中有各种与位置相关的属性,每次看到的时候都各种懵逼。索性一次总结一下。 clientHeight 内容可视区域的高度。包括padding不包括border、水平滚动条、margin。对于inline的元素这个属性一直是0&#xff0c;单位px&#xff0c;只读元素。offsetHeight offsetHei…

如何判断您是否拥有32位或64位版本的Google Chrome浏览器

Google Chrome is extremely popular with our readers, but did you know that they also have a 64-bit version of the browser these days? Here’s how to tell which version you are running, and how to switch if you aren’t. 谷歌浏览器在我们的读者中非常受欢迎&a…

Kubernetes 跨集群流量调度实战 :访问控制

背景众所周知&#xff0c;Flomesh 的服务网格产品 osm-edge[1] 是基于 SMI&#xff08;Service Mesh Interface&#xff0c;服务网格接口&#xff09; 标准的实现。SMI 定义了流量标识、访问控制、遥测和管理的规范。在 上一篇 中&#xff0c;我们体验过了多集群服务&#xff0…

python下sqlite增删查改方法(转)

sqlite读写 #codingutf-8 import sqlite3 import os #创建数据库和游标 if os.path.exists( test.db):connsqlite3.connect( test.db)curconn.cursor() else:connsqlite3.connect( test.db)curconn.cursor()#创建表 cur.execute(CREATE TABLE IF NOT EXISTS customer (ID VARCH…

Apache HTTP Server 与 Tomcat 的三种连接方式介绍

本文转载自IBM developer 首先我们先介绍一下为什么要让 Apache 与 Tomcat 之间进行连接。事实上 Tomcat 本身已经提供了 HTTP 服务&#xff0c;该服务默认的端口是 8080&#xff0c;装好 tomcat 后通过 8080 端口可以直接使用 Tomcat 所运行的应用程序&#xff0c;你也可以将该…

印象笔记和有道云笔记程序员_记录,存储和共享笔记的最佳应用程序和云服务...

印象笔记和有道云笔记程序员Is your desk and computer covered with sticky notes? Do you have miscellaneous pieces of paper with bits of information buried in drawers, your laptop case, backpack, purse, etc.? Get rid of all the chaos and get organized with …

django15:中间件

中间件 开发django项目是&#xff0c;涉及全局相关功能&#xff0c;都可以使用中间件实现。 1.请求时&#xff0c;需要经过中间件&#xff0c;才能到达真正的django后端。 2.响应走的时候&#xff0c;也要经过中间件&#xff0c;才能出去。 依次经过里面的中间件进出&#x…

互联网算法和产品优化的几个反直觉现象

本文不涉及任何具体的业务和形态&#xff0c;没有公开任何数据和需要保护的技术。互联网产品和算法的优化&#xff0c;是广大程序员和产品经理的主要工作。但想准确衡量线上实验效果&#xff0c;从来都不简单。笔者将这些反直觉现象&#xff0c;总结成三个典型案例予以讨论。然…

SD 胡策 Round 1 T3 彩尾巴猹的二进制数

发现一个区间[L,R]代表的2进制数是3的倍数&#xff0c;当且仅当从L开始的后缀二进制值 - 从R1开始的后缀二进制值 是 3 的倍数 (具体证明因为太简单而被屏蔽)。 于是我们就可以在每个点维护从它开始的后缀二进制数的值&#xff0c;因为在%3同余系下只有3个数&#xff0c;所以我…

django16: csrf跨站请求伪造/CSRF相关装饰器

CSRF 即跨站请求攻击 跨站请求伪造csrf钓鱼网站本质搭建一个跟正常网站一模一样的页面用户在该页面上完成转账功能转账的请求确实是朝着正常网站的服务端提交唯一不同的在于收款账户人不同给用户书写form表单 对方账户的input没有name属性你自己悄悄提前写好了一个具有默认的…

dropbox_Google的新存储定价与Microsoft,Apple和Dropbox相比如何

dropboxGoogle’s subscription storage service has a new name: Google One. Some prices are dropping and customers will also get customer support from an actual human for the first time. Google的订阅存储服务有一个新名称&#xff1a;Google One。 一些价格正在下…

WPF效果第二百零六篇之快速黑白灰效果

一大早就看到群友讨论怎么快速让界面黑白灰效果,这不突然想起来N年前咱简单通过ShaderEffects调节过饱和度、对比度、亮度;今天再次玩耍一下;来看看最终实现的效果:1、核心代码&#xff1a;sampler2D implicitInput : register(s0); float factor : register(c0); float4 main(…

极大似然估计与贝叶斯定理

文章转载自&#xff1a;https://blog.csdn.net/zengxiantao1994/article/details/72787849 极大似然估计-形象解释看这篇文章&#xff1a;https://www.zhihu.com/question/24124998 贝叶斯定理-形象解释看这篇文章&#xff1a;https://www.zhihu.com/question/19725590/answer/…