在登录系统以及需要上传填入的信息时候,用的最多就是表单系统,例如像下面的这种格式

  1. <form action="/form1/" method="post">
  2.     {% csrf_token %}
  3.     <div>
  4.         <input type="text" name="username" />
  5.     </div>
  6.     <div>
  7.         <input type="text" name="passwd" />
  8.     </div>
  9.     <div>
  10.         <input type="submit" value="提交" />
  11.     </div>
  12. </form>

那么在后端我们是需要验证上传的数据是否合乎我们的规定的,比如我们要求填写的整数型,但是上传的是字符型。或者我们要求必填的,但是并没有进行填写。

按照之前的做法,我们是通过request.POST的方法取得数据后进行判断。这种方法太过于麻烦了点,我们可以通过django自带的forms方法来进行判断。就以前面的登录为例。

首先定义一个UserForm类,继承自forms.Form

  1. from django import forms
  1. class UserForm(forms.Form):
  2.     username = forms.CharField()
  3.     passwd=forms.IntegerField()

处理函数:

  1. def login_form(request):
  2.     obj=UserForm()
  3.     if request.method == "POST":
  4.         user_input=UserForm(request.POST)
  5.         if user_input.is_valid():
  6.             data=user_input.clean()
  7.             username=data['username']
  8.             passwd=data['passwd']
  9.             print username
  10.             print passwd
  11.         else:
  12.             error_msg=user_input.errors
  13.             return render(request,'login.html',{'obj':user_input,'error':error_msg})
  14.     return render(request,'login.html',{'obj':obj})

我们来到登录界面看下

如果我们什么都不填,然后点击提交。这个时候会提示需要输入用户名和密码。

再来看下输入的字符不符合定义要求的场景,在UserForm中密码定义的是整数型。如果我们在输入的时候输入字符型会怎样提示呢。如下图所示,会提示密码必须输入整数

前面看了forms类的用法,接下来看下代码中的应用。

这句的作用是将POST得到的数据经过UserForm校验

  1. user_input=UserForm(request.POST)
  1. is_valid是判断验证后的数据是正确还是错误。如果像之前没有填写或者填写的格式错误,那么is_valid将返回False.
  1. user_input.is_valid()
  1. 如果is_valid返回的是False,那么通过user_input.errors将得到验证错误的具体信息。
  1. error_msg=user_input.errors
  1. 如果数据验证通过。那么通过user_input.clean()将会得到验证通过的数据,clean()返回的是一个字典。也可以通过user_input.clean_data得到相同的数据
  1. data=user_input.clean()
  2. username=data['username']
  3. passwd=data['passwd']
  1.  
  1. 那么form.Form是如何进行校验的呢。我们通过打印user_input也就是验证后的返回值就看出。其实user_input得到的是一个HTML格式。<label>标识为没一个字段添加了标签,在type属性中指定了字段的类型。通过url的方式,FormPOST的数据进行了校验
  1. <tr><th><label for="id_username">Username:</label></th><td><input id="id_username" name="username" type="text" value="dfdf" required /></td></tr>
  1. <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属性保持一致,否则会校验错误

  1. class UserForm(forms.Form):
  2.     username = forms.CharField()
  3.     passwd=forms.IntegerField()

我们还可以将Form的字段在HTML中显示出来。在render中返回user_input

  1. return render(request,'form_test.html',{'form':user_input})
  1. 在网页中添加{{form.username}}显示用户信息。
  1. <form action="/form1/" method="post">
  2.     {{ form.username }}
  1. 将在网页中显示出登录的信息

接下来来看下Form里面的控制字段:

required:是否可以为空,required=True不可以为空,required=False可以为空

max_length:最多的字符

min_length:最小的字符

error_message: required:’字段不能为空’,invalid:’格式错误’

使用方法如下:

  1. class UserForm(forms.Form):
  2.     username = forms.CharField()
  3.     passwd=forms.IntegerField(error_messages={'required':u'密码不能为空','invalid':'格式错误'})
  1. 显示结果如下:这里的错误信息就显示我们自己定义的信息

  1. Widget:widget=forms.TextInput(attrs={'class': 'c1'}) 给自动生成的input标签自定义class属性
  1. username = forms.CharField(widget=forms.TextInput(attrs={'class': 'c1'}))
  1. 生成的网页结果中class被赋值为c1.这样我们就可以通过定义css文件来指定不通的网页格式

  1. Widget:widget=forms.Textarea()  生成Textarea标签。widget默认生成input标签

  1.  
  1.  
  1.  
  1.  
  1.  

Django之表单form的更多相关文章

  1. python运维开发(十九)----Django后台表单验证、session、cookie、model操作

    内容目录: Django后台表单验证 CSRF加密传输 session.cookie model数据库操作 Django后台Form表单验证 Django中Form一般有2种功能: 1.用于做用户提交 ...

  2. django from表单验证

    django from表单验证   实现:表单验证 工程示例: urls.py 1 2 3 4 5 6 7 8 9 from django.conf.urls import url from djan ...

  3. 六、Django之表单和类视图-Part 4

    一.表单form 为了接收用户的投票选择,我们需要在前端页面显示一个投票界面.让我们重写先前的polls/detail.html文件,代码如下: <h1>{{ question.quest ...

  4. HTML ------ 关于表单 Form

    Form(表单)主要用于采集和提交用户输入的信息,是页面与WEB服务器交互过程中 最重要的信息来源. 掌握表单(Form)有以下几个要点: 重要form属性 form常用控件 form提交方式 § 重 ...

  5. Bootstrap~表单Form

    回到目录 在进行自己的后台改版时,大体布局都使用了bootstrap,剩下的表单部分没理由不去使用它,对于表单的美化和布局,bootstrap做的也是很不错的,有大气的边框,多功能的按钮及宏观的表单布 ...

  6. 表单 - Form - EasyUI提供的表单异步提交

    方案一 被提交的表单 <form id="loginForm" method="post"> <table align="cente ...

  7. 跟服务器交互的Web表单(form)

    使用HTML来构建可以跟服务器交互的Web表单(form),通过给你的form元素添加一个action属性来达到此目的. action属性的值指定了表单提交到服务器的地址. 例如: <form ...

  8. 3、网页制作Dreamweaver(表单form)

    表单form (虚线不显示) 1.写法: <form id="form1" name="form1" method="post" ac ...

  9. DHTMLX 前端框架 建立你的一个应用程序 教程(九)--绑定表单Form到表格Grrid中

    绑定表单Form到表格Grrid中 现在我们需要选中一行表格数据的时候 数据能在表单中显示出来 我们可以使用DHTMLX 丰富的组件功能实现它. 绑定表单到表格 1.调用bind方法将表单绑定到网格, ...

随机推荐

  1. setcookie函数的注意事项

    函数说明 bool setcookie ( string $name [, string $value = "" [, int $expire = 0 [, string $pat ...

  2. RabbitMQ介绍

    (一)RabbitMQ基本概念 RabbitMQ是流行的开源消息队列系统,用erlang语言开发.我曾经对这门语言挺有兴趣,学过一段时间,后来没坚持.RabbitMQ是 AMQP(高级消息队列协议)的 ...

  3. 2 ignite关键特性

    数据注入和流计算: Ignite流式计算允许以可扩展和容错的方式处理连续不中断的数据流.在一个中等规模的集群中,数据注入Ignite的比例会很高,很容易达到每秒百万级的规模. Ignite可以与主要的 ...

  4. 基于windows平台的命令行软件安装工具Chocolatey的安装

    本文介绍Chocolatey的安装和使用 Chocolatey 这是基于.NET Framework 4以上的windows安装软件的命令行工具 安装 第一步,打开你的powershell.exe,使 ...

  5. Java8 日期和时间实用技巧

    新的日期API ZoneId: 时区ID,用来确定Instant和LocalDateTime互相转换的规则 Instant: 用来表示时间线上的一个点 LocalDate: 表示没有时区的日期, Lo ...

  6. Firemonkey Android IOS 图标

    图标很多

  7. jdbc.properties 文件的配置

    jdbc.properties文件的配置   使用配置文件访问数据库的优点是: 一次编写随时调用,数据库类型发生变化只需要修改配置文件. 配置文件的设置: 在配置文件中,key-value对应的方式编 ...

  8. char 与 String 之间的转换

    public class Test { public static void main(String [] args) { char c = 'a'; System.out.println (c); ...

  9. sed对指定行添加或删除注释

      如下文本   zimu.txt aaaaa #bbbbbb cccccc dddddd 以下命令如果需要在文本中更改 需要加 -i 或者  -ri参数 用sed在aaa前加#注释 sed 's/^ ...

  10. redis的特性