My favorites | 中文(简体) | Sign in

使用 webapp 处理表单

如果我们希望用户能够发布自己的问候,我们需要一种方法来处理用户使用网络表单提交的信息。使用 webapp 框架可以轻松地处理表单数据。

用 webapp 处理网络表单

用以下内容替换 helloworld/helloworld.py 的内容:

import cgi

from google.appengine.api import users
from google.appengine.ext import webapp
from 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()

重新加载页面以查看表单,然后尝试提交邮件。

该版本有两个处理程序:映射到网址 /MainPage,显示网络表单。映射到网址 /signGuestbook,显示网络表单提交的数据。

Guestbook 处理程序使用 post() 方法而不是 get() 方法。这是因为 MainPage 显示的表单使用 HTTP POST 方法 (method="post") 来提交表单数据。如果由于一些原因您需要一个处理程序来处理对同一网址的 GET 和 POST 操作,您可以为相同类中的每个操作定义一种方法。

post() 方法的代码从 self.request 获取表单数据。在把它重新显示给用户之前,它会使用 cgi.escape() 来将 HTML 特殊字符转义为相应的对等字符实体。cgi 是标准 Python 库中的模块;有关详细信息,请参阅 cgi 文档。

注意:App Engine 环境包括整个 Python 2.5 标准库。但是,不是所有操作都允许执行。App Engine 应用程序在受限的环境中运行,使 App Engine 可以安全地自行扩展。例如,不允许对操作系统的低级调用、联网操作,以及一些文件系统操作,并且会在尝试时引发错误。有关详细信息,请参阅 Python 运行时环境

下一步...

既然我们可以从用户收集信息,那么我们还需要放置信息的位置和取回信息的方法。

继续转至使用数据存储区