Django之表单form
在登录系统以及需要上传填入的信息时候,用的最多就是表单系统,例如像下面的这种格式
<form action="/form1/" method="post">
{% csrf_token %}
<div>
<input type="text" name="username" />
</div>
<div>
<input type="text" name="passwd" />
</div>
<div>
<input type="submit" value="提交" />
</div>
</form>
那么在后端我们是需要验证上传的数据是否合乎我们的规定的,比如我们要求填写的整数型,但是上传的是字符型。或者我们要求必填的,但是并没有进行填写。
按照之前的做法,我们是通过request.POST的方法取得数据后进行判断。这种方法太过于麻烦了点,我们可以通过django自带的forms方法来进行判断。就以前面的登录为例。
首先定义一个UserForm类,继承自forms.Form
from django import forms
class UserForm(forms.Form):
username = forms.CharField()
passwd=forms.IntegerField()
处理函数:
def login_form(request):
obj=UserForm()
if request.method == "POST":
user_input=UserForm(request.POST)
if user_input.is_valid():
data=user_input.clean()
username=data['username']
passwd=data['passwd']
print username
print passwd
else:
error_msg=user_input.errors
return render(request,'login.html',{'obj':user_input,'error':error_msg})
return render(request,'login.html',{'obj':obj})
我们来到登录界面看下
如果我们什么都不填,然后点击提交。这个时候会提示需要输入用户名和密码。
再来看下输入的字符不符合定义要求的场景,在UserForm中密码定义的是整数型。如果我们在输入的时候输入字符型会怎样提示呢。如下图所示,会提示密码必须输入整数
前面看了forms类的用法,接下来看下代码中的应用。
这句的作用是将POST得到的数据经过UserForm校验
user_input=UserForm(request.POST)
is_valid是判断验证后的数据是正确还是错误。如果像之前没有填写或者填写的格式错误,那么is_valid将返回False.
user_input.is_valid()
如果is_valid返回的是False,那么通过user_input.errors将得到验证错误的具体信息。
error_msg=user_input.errors
如果数据验证通过。那么通过user_input.clean()将会得到验证通过的数据,clean()返回的是一个字典。也可以通过user_input.clean_data得到相同的数据
data=user_input.clean()
username=data['username']
passwd=data['passwd']
那么form.Form是如何进行校验的呢。我们通过打印user_input也就是验证后的返回值就看出。其实user_input得到的是一个HTML格式。<label>标识为没一个字段添加了标签,在type属性中指定了字段的类型。通过url的方式,Form对POST的数据进行了校验
<tr><th><label for="id_username">Username:</label></th><td><input id="id_username" name="username" type="text" value="dfdf" required /></td></tr>
<tr><th><label for="id_passwd">Passwd:</label></th><td><input id="id_passwd" name="passwd" type="number" value="123" required /></td></tr>
有一点注意的是:在类中定义的属性名username和passwd必须和网页中的name属性保持一致,否则会校验错误
class UserForm(forms.Form):
username = forms.CharField()
passwd=forms.IntegerField()
我们还可以将Form的字段在HTML中显示出来。在render中返回user_input
return render(request,'form_test.html',{'form':user_input})
在网页中添加{{form.username}}显示用户信息。
<form action="/form1/" method="post">
{{ form.username }}
将在网页中显示出登录的信息
接下来来看下Form里面的控制字段:
required:是否可以为空,required=True不可以为空,required=False可以为空
max_length:最多的字符
min_length:最小的字符
error_message: required:’字段不能为空’,invalid:’格式错误’
使用方法如下:
class UserForm(forms.Form):
username = forms.CharField()
passwd=forms.IntegerField(error_messages={'required':u'密码不能为空','invalid':'格式错误'})
显示结果如下:这里的错误信息就显示我们自己定义的信息
Widget:widget=forms.TextInput(attrs={'class': 'c1'}) 给自动生成的input标签自定义class属性
username = forms.CharField(widget=forms.TextInput(attrs={'class': 'c1'}))
生成的网页结果中class被赋值为c1.这样我们就可以通过定义css文件来指定不通的网页格式
Widget:widget=forms.Textarea() 生成Textarea标签。widget默认生成input标签
Django之表单form的更多相关文章
- python运维开发(十九)----Django后台表单验证、session、cookie、model操作
内容目录: Django后台表单验证 CSRF加密传输 session.cookie model数据库操作 Django后台Form表单验证 Django中Form一般有2种功能: 1.用于做用户提交 ...
- django from表单验证
django from表单验证 实现:表单验证 工程示例: urls.py 1 2 3 4 5 6 7 8 9 from django.conf.urls import url from djan ...
- 六、Django之表单和类视图-Part 4
一.表单form 为了接收用户的投票选择,我们需要在前端页面显示一个投票界面.让我们重写先前的polls/detail.html文件,代码如下: <h1>{{ question.quest ...
- HTML ------ 关于表单 Form
Form(表单)主要用于采集和提交用户输入的信息,是页面与WEB服务器交互过程中 最重要的信息来源. 掌握表单(Form)有以下几个要点: 重要form属性 form常用控件 form提交方式 § 重 ...
- Bootstrap~表单Form
回到目录 在进行自己的后台改版时,大体布局都使用了bootstrap,剩下的表单部分没理由不去使用它,对于表单的美化和布局,bootstrap做的也是很不错的,有大气的边框,多功能的按钮及宏观的表单布 ...
- 表单 - Form - EasyUI提供的表单异步提交
方案一 被提交的表单 <form id="loginForm" method="post"> <table align="cente ...
- 跟服务器交互的Web表单(form)
使用HTML来构建可以跟服务器交互的Web表单(form),通过给你的form元素添加一个action属性来达到此目的. action属性的值指定了表单提交到服务器的地址. 例如: <form ...
- 3、网页制作Dreamweaver(表单form)
表单form (虚线不显示) 1.写法: <form id="form1" name="form1" method="post" ac ...
- DHTMLX 前端框架 建立你的一个应用程序 教程(九)--绑定表单Form到表格Grrid中
绑定表单Form到表格Grrid中 现在我们需要选中一行表格数据的时候 数据能在表单中显示出来 我们可以使用DHTMLX 丰富的组件功能实现它. 绑定表单到表格 1.调用bind方法将表单绑定到网格, ...
随机推荐
- navicat链接远程数据库
1.之前使用的是常规的连接方式 学习源头: https://jingyan.baidu.com/article/0aa2237573c1e688cc0d6427.html 这里的ip地址是服务器的ip ...
- 蓝桥杯 算法训练 ALGO-146 4-2找公倍数
算法训练 4-2找公倍数 时间限制:1.0s 内存限制:256.0MB 查看参考代码 问题描述 这里写问题描述. 打印出1-1000所有11和17的公倍数. 样例输入 一个满足题 ...
- 【转】 Pro Android学习笔记(八十):服务(5):访问远程服务
目录(?)[-] Client的AIDL文件 Client的代码 建立连接 请求服务 断开连接 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://bl ...
- Regexp:目录
ylbtech-Regexp:目录 1.返回顶部 1. http://www.runoob.com/regexp/regexp-tutorial.html 2. 2.返回顶部 3.返回顶部 4 ...
- windows下socket编程:区分shutdown()及closesocket()
以下描述主要是针对windows平台下的TCP socket而言. 首先需要区分一下关闭socket和关闭TCP连接的区别,关闭TCP连接是指TCP协议层的东西,就是两个TCP端之间交换了一些协议包( ...
- mybatis如何防止sql注入(1)
sql注入大家都不陌生,是一种常见的攻击方式,攻击者在界面的表单信息或url上输入一些奇怪的sql片段,例如“or ‘1’=‘1’”这样的语句,有可能入侵参数校验不足的应用程序.所以在我们的应用中需要 ...
- bash姿势-没有管道符执行结果相同于管道符
听起来比较别口: 直接看代码: shell如下: [root@sevck_linux ~]# </etc/passwd grep root root:x:::root:/root:/bin/ba ...
- js防止重复点击
表单元素 disabled 没有之一. el.prop('disabled', true); ajax({}).done(function() { el.prop('disabled', false) ...
- unittest添加测试用例方法
1. suite=unittest.TestLoader().loadTestsFromTestCase(changedTestHJ)unittest.TextTestRunner(verbosity ...
- 10-31SQLserver基础--聚合函数、分组
在查询语句时,也存在一些方法和属性,而这些方法在查询时统称为函数,便利查询时使用 聚合函数(都是针对字段操作) 聚合是缩减一系列输入值的表达式,例如缩减为单个值. Select*from biao 1 ...