[跟康爷学GAE]访客留言的Form和表单获取
《跟康爷学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。
代码
下面是本小节的代码,提供下载(因为贴代码被认为有点问题,所以我上传到网上,让大家直接下载源代码)
请问 cgi.escape(self.request.get(‘content’)) 中的cgi.escape 有什么作用?
@JJ Convert the characters ‘&’, ” in string s to HTML-safe sequences,s = cgi.escape( “”"& “”" ) s 就是 “& < >”
o… 明白,谢谢
\n
\n