• 写一个简单的Django form表单处理

    request.GET和request.POST
    服务器君一共花费 9.783 ms 进行了 4 次数据库查询,努力地为您提供了这个页面。
    广告很萌的

    有了前面的 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)。

更多 推荐条目

Welcome to NowaMagic Academy!

现代魔法 推荐于 2013-02-27 10:23   

本章最新发布
随机专题
  1. [Python程序设计] Tornado背景知识介绍 4 个条目
  2. [PHP程序设计] 声明式编程范式 12 个条目
  3. [C语言程序设计] 结构体基本知识 1 个条目
  4. [软件工程与项目管理] 浏览器的HTML解析器 8 个条目
  5. [PHP程序设计] 命令式编程范式 6 个条目
  6. [移动开发] 从代码角度去认识HttpClient 2 个条目
  7. [PHP程序设计] 编程范式初探 3 个条目
  8. [软件工程与项目管理] 浏览器的CSS解析 7 个条目
  9. [搜索引擎优化] 百度搜索引擎优化指南 3 个条目
  10. [智力开发与知识管理] 超越整体性学习 5 个条目
  11. [Python程序设计] Python数据类型 11 个条目
  12. [搜索引擎优化] 与百度权重有关的信息 2 个条目
窗口 -- [资讯]