注:以下内容转载自 现代魔法学院 网站的 写一个简单的Django form表单处理 一文,仅供学习使用。
有了前面的 HttpRequest 对象与 request.META 的背景知识,现在我们可以写一个 form 表单处理了。
除了基本的元数据,HttpRequest 对象还有两个属性包含了用户所提交的信息:request.GET 和 request.POST。二者都是类字典对象,你可以通过它们来访问 GET 和 POST 数据。
写一个form表单处理
1. 设计表单模板 form.html
我们先设计一个表单页面,就是需要设计模板、view层函数与 URLconf。先把模板做出来吧:
<html>
<head>
<title>Search</title>
</head>
<body>
<form action="/search/" method="get">
<input type="text" name="q">
<input type="submit" value="Search">
</form>
</body>
</html>
2. view 层函数与 URLconf
view 层函数:
def testform(request):
return render_to_response('form.html')
URLconf:
('^testform/$', testform),
现在访问 http://127.0.0.1:8000/testform/,可以出现表单的页面里。不过,当你通过这个 form 提交数据时,你会得到一个 Django 404 错误。这个 form 指向的 URL /search/ 还没有被实现。让我们添加第二个视图函数并设置 URL:
view 层的 search 函数:
def search(request):
if 'q' in request.GET:
message = 'You searched for: %r' % request.GET['q']
else:
message = 'You submitted an empty form.'
return HttpResponse(message)
URLconf:
(r'^search/$', search),
现在在表单输入 nowamagic,提交,URL 为 http://127.0.0.1:8000/search/?q=nowamagic,页面显示:
You searched for: u'nowamagic'
OK,成功。
一些背景知识
我们说“ request.GET 和 request.POST 是类字典对象”,意思是他们的行为像 Python 里标准的字典对象,但在技术底层上他们不是标准字典对象。比如说,request.GET 和 request.POST 都有 get()、keys() 和 values() 方法,你可以用用 for key in request.GET 获取所有的键。
那到底有什么区别呢? 因为 request.GET 和 request.POST 拥有一些普通的字典对象所没有的方法。我们会稍后讲到。
你可能以前遇到过相似的名字:类文件对象,这些 Python 对象有一些基本的方法,如 read(),用来做真正的 Python 文件对象的代用品。
POST 数据是来自 HTML 中的 form 标签提交的,而 GET 数据可能来自 form 提交也可能是 URL 中的查询字符串(the query string)。