Django4 中文入门教程 Django4.0 使用表单-HTML表单

2024-02-25 开发教程 Django4 中文入门教程 匿名 7

在HTML中,表单是在 ​<form>...</form>​中的一些元素,它允许访客做一些类似输入文本、选择选项、操作对象或空间等动作,然后发送这些信息到服务端。

一些表单界面元素(文本框或复选框)内置在HTML中。其他会更复杂些;像弹出日期选择或者允许您移动滑块或者操作控件,一般通过使用JavaScript,CSS以及HTML表单中的

<input>​元素来实现这些效果。

和元素​<input>​一样,表单必须指定两样东西:

  • where​:对应于用户输入的数据应该返回到的URL
  • how​:应该返回数据的 HTTP 方法

例如,Django admin的登录表单包含了一些 ​<input>​ 元素:用户名用 ​type="text"​ ,密码用 ​type="password"​ ,登录按钮用 ​type="submit"​ 。它还包含一些用户看不到的隐藏文本字段,Django用它们来决定下一步行为。
它还告诉浏览器表单数据应该发往 ​<form>​ 的 ​action ​属性指定的URL—— ​/admin/ ​,并且应该使用它的 ​method ​属性指定的HTTP方法—— ​post ​。
当 ​<input type="submit" value="Log in">​ 元素被触发的时候,数据会发送到 ​/admin/​ 。

GET和POST

处理表单时只会用到 ​GET ​和 ​POST ​两种HTTP方法。
Django的登录表单使用 ​POST ​方法传输数据,在这个方法中浏览器会封装表单数据,为了传输会进行编码,然后发送到服务端并接收它的响应。
相比之下,​GET ​方法将提交的数据捆绑到一个字符串中,并用它来组成一个URL。该URL包含了数据要发送的地址以及一些键值对应的数据。
GET ​和 ​POST ​通常用于不同的目的。
任何可能用于更改系统状态的请求应该使用 ​POST ​—— 比如一个更改数据库的请求。​GET ​应该只被用于不会影响系统状态的请求。
GET ​也不适合密码表格,因为密码会出现在 URL 中,因此也会出现在浏览器历史和服务器日志中,都是纯文本。它也不适合于大量的数据,或二进制数据,如图像。一个使用 ​GET ​请求管理表单的网络应用程序是一个安全风险:攻击者很容易模仿表单的请求来获得对系统敏感部分的访问。​POST​,加上其他保护措施,如 Django 的 CSRF 保护,可以对访问进行更多控制。
另一方面, ​GET ​方法适用于诸如网页搜索表单这样的内容,因为这类呈现为一个 ​GET ​请求的URL很容易被存为书签、分享或重新提交。