Django4.0 使用表单-HTML表单
在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很容易被存为书签、分享或重新提交。