Django1.8文档翻译-Form-Overview

表单的使用

关于此文档

此文档提供基本的web表单介绍和Django中如何处理表单。关于更多的具体细节,能够查阅更多详细文档。
除非你计划构建的网站和应用不发布任何内容,不接受用户输入的数据,不然你须要理解和使用表单。
Django提供一些工具和库帮助你建立表单接收用户的输入,并处理和返回数据。html

HTML 表单

在HTML中,表单在<form>..</form>里面收集用户的输入,例如一段文本,选择按钮等,而后发送输入的信息到服务端。
一些表单接口元素,例如文本输入复选框都很是的简单而且是HTML内置的,其余的要复杂不少好比界面弹出日期选择器滑动滑块,操纵这些特效一般会使用JavaScriptCSS来实现。
关于<input>元素,一个表单必须指定两件事:程序员

  • where:用户输入数据所对应的URL如何返回
  • how:HTTP方法如何返回数据

一个例子,Django的Admin中有一个登录表单,包含几个<input>元素,type="text"对应usernametype="password"对应passwordtype="submit"对应登陆按钮,还包含一些对用户隐藏的文本字段,令Django决定接下来要干什么。web

GET和POST

GET和POST是处理表单过程当中惟一使用的HTML方法
Django的login表单使用POST方法,在浏览器中打包表单数据,编码传输,将其发送给服务器,而后接收返回的响应。
对比GET,绑定提交的数据到字符串生成URL,在URL中包含数据必须发送的地址以及数据的键和值,若是你在文档中搜索能够在功能中看见,将会为表单生成这样的URL:
https://docs.djangoproject.com/search/?q=forms&release=1.
GETPOST一般用于不一样目的
一个请求若是用来改变系统的状态,例如:一个请求改变了数据库,应该使用POSTGET应该在不会改变系统状态的状况下使用。
GET不适合用于密码表单,由于密码会出如今URL里,所以,在浏览器的历史记录和服务器日志的纯文本中会出现密码。它也不能适用于大量的数据,相似图片的二进制数据。一个web应用使用GET请求管理员表单会带来安全风险,攻击者会很容易的模仿表单请求获取系统敏感信息,POST结合其余的保护措施,提供更多的访问控制,例如:CSRF protection
在其余方面,GET适合web搜索表单,由于这个URL的GET请求能够方便的存为书签、共享、提交。数据库


Djano表单的做用

处理表单是一项复杂的业务,考虑Django管理员,众多的数据和几个不一样的数据类型须要显示在表单里,渲染到HTML,使用方便的界面编辑,返回到服务器,验证和清理,保存或进一步的加工处理。django

Django表单函数可使绝大部分的工做简单化、自动化,而且比大多数程序员本身写的代码要安全。浏览器

Django处理3个不一样的表单部分:安全

  • 预备和调整数据渲染页面
  • 建立HTML表单数据格式
  • 接收处理客户端提交的表单和数据

你可能想手动的完成这些功能,可是Django能够帮你完成这些。服务器


Django表单

咱们简要的描述HTML表单,可是HTML<form>只是一部分机械的要求。函数

在web应用程序的上下文,form多是指HTML<form>,或Djangoform类实例,或结构化数据提交时返回,或这些部位的端到端的集合。工具

Django表单类

这个系统组件的核心是Djangoform类,在Django模型中描述了类似的逻辑结构对象,它的行为,form类描述表单如何工做和建立。

使用与model类类似的字段映射数据库方式,form类字段映射HTML表单<input>元素。

表单的字段是类自己,它们管理表单数据, 提交的时候执行验证。DateFieldFileField处理不一样的数据,用它们作不一样的事情。

一个表单字段表明一个用户在浏览器中的widget(窗口部件)--用户界面的机制,每一个字段类型有一个默认的Widget class,可是它们能够按要求重写。

实例化,处理,渲染表单

在Django渲染一个对象,咱们通常:

1.在视图(view)中抓住它(从数据库中取出)
2.传送它到模版文件
3.扩大到使用模版变量的HTML标签

在模版中渲染一个表单与渲染其余对象很类似,可是有些键值不同。

模型实例中不包含数据,且几乎不多在模版中作任何有用的事情,另外一方面,它塑造一种完美的感受渲染一个未填充的表单,咱们想要用户填充它,这就是咱们想要的。

当咱们在view中处理一个模型实例,咱们一般在数据库中检索,当咱们处理一个表单咱们一般在view中实例化它

当咱们实例化一个表单,咱们能够选择让它空着或者预填充,例如:

  • 数据表单保存在模型(model)实例
  • 咱们从其余来源收集的数据
  • 之前的HTML表单提交接收的数据

剩下的这些案例都是很是有趣的,它让用户不仅是阅读网页,发送信息与网站交互。


创建一个表单

须要完成的工做
假设在你的网站上建立一个简单的表单,获取用户的名字,你须要在模版(tempalte)中添加如下代码:

<form action="/your-name/" method="post">
    <label for="your_name">Your name: </label>
    <input id="your_name" type="text" name="your_name" value="{{ current_name }}">
    <input type="submit" value="OK">
</form>

这些告诉浏览器返回表单数据到URL/your-name/,使用POST方法,它会显示一个文本框,标记为“your_name”,和一个按钮标记为“ok”,若是模版上下文包含一个current_name变量,将会预填充your_name字段。

你须要在view中渲染包含HTML表单的模版,而且能够适当的绑定current_name字段

当表单提交以后,POST请求发送到服务器将包含表单数据。

如今你须要在view中处理相应的 /your-name/ URL映射,将会在请求发现相应的键/值对应,而后处理他们。

这是一个很是简单的表单,在实践中,一个表单可能包含几十个甚至几百个字段,这些可能须要预填充,咱们可能期待用户在最后提交以前,分红几个周期编辑提交数据。

咱们可能须要一些验证在浏览器中出现,即便在表单提交。咱们可能想要使用一些复杂的字段,容许用户从日历选择日期等。

相关文章
相关标签/搜索