首页 > 教程 > [跟康爷学GAE]访客留言的Form和表单获取

[跟康爷学GAE]访客留言的Form和表单获取

2009年7月20日 康爷 发表评论 阅读评论

跟康爷学GAE》是整个Google App Engine教程计划的一个总名称,如果你对这个系列的GAE教程感兴趣,可以订阅康爷的博客。整个教程的目录在:GAE教程计划的目录,教程会同步发送到gae.kangye.org上面。

如果你有什么问题或者建议,欢迎在twitter上follow我,然后给我回复或者direct message。我的twitter账号是:lookon,如果你无法访问twitter,建议你使用http://twitzap.com/

今天我们讲如何用GAE做一个web表单(form),然后获取表单里的内容。

所谓web表单,通俗地讲就是我们平时看到的一些需要按提交键的web模块,比如注册信息,当我们填完之后,提交,然后服务器获取我们所填的内容,进行注册。提交表单是一个POST的过程,向服务器POST你的表单内容,而服务器需要获取你的内容。

修改hello.py里的内容,变成:

import cgi

from google.appengine.api import usersfrom google.appengine.ext import webappfrom google.appengine.ext.webapp.util import run_wsgi_app

class MainPage(webapp.RequestHandler):  def get(self):    self.response.out.write("""      <html>        <body>          <form action="/sign" method="post">            <div><textarea name="content" rows="3" cols="60"></textarea></div>            <div><input type="submit" value="Sign Guestbook"></div>          </form>        </body>      </html>""")

class Guestbook(webapp.RequestHandler):  def post(self):    self.response.out.write('<html><body>You wrote:<pre>')    self.response.out.write(cgi.escape(self.request.get('content')))    self.response.out.write('</pre></body></html>')

application = webapp.WSGIApplication(                                     [('/', MainPage),                                      ('/sign', Guestbook)],                                     debug=True)

def main():  run_wsgi_app(application)

if __name__ == "__main__":  main()

 

当然你可以用一个ROUTE来写映射,这在之前的教程里有。

我们看到这句

<form action="/sign" method="post">

说明,form的方法是“提交”,所用的Handler是“/sign”。也就是会所,POST掉的数据由/sign地址来处理。我们来看,/sign的代码。定义了一个post方法,然后输出self.request.get(‘content’),这就是获取form中content字段的方法。我们回头去看form,

<div><textarea name="content" rows="3" cols="60"></textarea></div>

这个textarea的name是content。

以上程序做的是:访问主页看到表单,提交表单后,将会在/sign页看到你所输入的内容(去掉了前导空格)。

总结:

1.form的格式

<form action="/sign" method="post">

<div><textarea name="content" rows="3" cols="60"></textarea></div>

<div><input type="submit" value="Sign Guestbook"></div>

</form>

action为handler的地址,method为方法(一般都是post)

2.获取表单字段的方法

self.request.get(‘content’)

这里content是form里面某个input的name。

代码

下面是本小节的代码,提供下载(因为贴代码被认为有点问题,所以我上传到网上,让大家直接下载源代码)

访客留言的Form和表单获取.zip

分类: 教程 标签:
  1. JJ
    2009年9月25日23:09 | #1

    请问 cgi.escape(self.request.get(‘content’)) 中的cgi.escape 有什么作用?

  2. 康爷
    2009年9月26日02:08 | #2

    @JJ Convert the characters ‘&’, ” in string s to HTML-safe sequences,s = cgi.escape( “”"& “”" ) s 就是 “& < >”

  3. JJ
    2009年9月26日15:01 | #3

    o… 明白,谢谢
    \n
    \n

  1. 本文目前尚无任何 trackbacks 和 pingbacks.