Django 处理处理表单

除非你计划构建的网站和应用只是发布内容而不接受访问者的输入,否则你将需要理解并使用表单


HTML 表单:

在HTML中,表单的作用是收集标签中的内容,<form>...</form> 中间可以由访问者添加类似于文本,选择,

或者一些控制模块等等,然后 这些内容将会被送到服务端。

node2:/django/mysite/news/templates#cat index.html
<html>
	<head>		
<title>Index</title>
		<link rel='stylesheet' type='text/css' href='/static/news/Css/Index/index.css'/>
	</head>
	<body>
		<h1>布丁运维管理平台</h1>
		<!--图片标签-->
		<img class="img_bk" src="/static/news/scan.jpg"/>
		<!--表单提交-->
		<form action="/main/" method="post" >
			<table cellspacing="0" cellpadding="0">
				<tr>
					<td class="td1">用户名:</td>
					<td><input type="text" name="username"/></td>
					<td class="td3"></td>
					<td class="td4"></td>
				<tr/>
				<tr>
					<td class="td1">密码:</td>
					<td><input type="password" name="password"/></td>
					<td class="td3"></td>
					<td class="td4"></td>
				<tr/>
				<!-- <tr> -->
					<!-- <td class="td1">验证码:</td> -->
					<!-- <td>   <input type='text' name='code' /></td> -->
					<!-- <td class="td3"><img src="__APP__/Public/code" οnclick='this.src=this.src+"?"+Math.random()'/></td> -->
					<!-- <td class="td4"></td> -->
				<!-- </tr> -->
				<tr>
					<td class="td1"></td>
					<td><input type="submit" value="" name="imgLogin" /></td>
					<td class="td3"></td>
					<td class="td4"></td>
				</tr>
			</table>
		</form>
	</body>
</html>


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

1.目的地:响应用户输入数据的URL

2.方式:发送数据的HTTP方法

例如:Django Admin 站点的登陆表单包含几个<input> 元素:


type="text" 用于用户名,type="password" 用于密码,type="submit" 用于“Log in" 按钮。它还包含一些用户看不到的隐藏的文本字段,Django 使用它们来决定下一步的行为。

它还告诉浏览器表单数据应该发往<form> 的action 属性指定的URL —— /admin/,而且应该使用method 属性指定的HTTP 方法 —— post。

当触发<input type="submit" value="Log in"> 元素时,数据将发送给/admin/。






GET和POST:

处理表单时只会用到GET和POST 方法:

Django 的登陆表单使用POST方法,在这个方法中浏览器组合表单数据,

对它们进行编码以用于传输,将它们发送到服务器然后接收它的响应。

相反,GET组合提交的数据为一个字符串,然后使用它来生成一个URL。

Django 在表单中的角色

处理表单是一件很复杂的事情,考虑一下Django的Admin站点,不同类型的大量数据项需要在一个表单中准备好,

渲染成HTML,使用一个方便的界面编辑,返回服务器,验证并清除,然后保存或者向后继续处理。


Django 中的表单:

我们已经简短的讲述HTML表单,但是HTML的<form> 只是其机制的一部分。

在一个web应用中,"表单"可能指HTML <form>、或者生成它的Django 的Form、或者提交时发送的结构化数据、或者这些部分的总和。


构建一个表单:

需要完成的工作:

假设你想在你的网站上创建一个简单的表单,以获得用户的名字,你需要这样的模板:

<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’按钮。


你将需要一个视图来渲染这个包含HTML表单的模板,并提供合适的current_name 字段


当表单提交时,发往服务器的POST 请求将包含表单数据。

现在你还需要一个对应/your-name/ URL的视图,它在请求中找到正确的键/值对,然后处理它们。

这是一个非常简单的表单,实际应用中,一个表单可能包含几十上百个字段,其中大部分需要预填充,


而且我们预料到用户景来会编辑


在Django中构建一个表单:

Form类

我们已经计划好了我们的HTML,表单应该呈现的样子。在Django中,我们的起始点是这里:

node2:/django/mysite/news#cat forms.py
from django import forms

class UploadFileForm(forms.Form):
    title = forms.CharField(max_length=50)
    file = forms.FileField()
	
它定义一个Form类,只带有一个字段(your_name)。我们已经对这个字段使用一个友好的标签,

当渲染时它将出现在<label>中


字段允许的最大长度通过max_length 定义。 它完成两件事情,首先.

它在HTML 的<input> 上放置一个maxlength="100" 

Form的实例具有一个is_valid() 方法,



视图:

发送给Django 网站的表单数据通过一个视图处理,一般和发布这个表单的是同一视图,

这允许我们重用一些相同的逻辑

要操作一个通过URL发布的表单,我们要在视图中实例表单。

如果访问视图的是一个GET请求,它将创建一个空的表单实例并将它放置到要渲染的模板的上下文中。

这是我们在第一次访问该URL时预期发生的情况。

原文地址:https://www.cnblogs.com/hzcya1995/p/13349398.html