使用Google App Engine上的python使用POST方法处理HTML表单数据

时间:2012-10-31 21:42:20

标签: python web-services google-app-engine cgi

尝试在Google App Engine上开发一个python Web服务,该服务将处理从HTML表单发布的数据。有人可以告诉我我做错了什么吗?所有文件都驻留在桌面\ helloworld上的同一目录中。

操作系统:赢得7 x64 Python 2.7 Google App Engine(本地)

helloworld.py

import webapp2
import logging
import cgi

class MainPage(webapp2.RequestHandler):

  def post(self):
    self.response.headers['Content-Type'] = 'text/plain'
    form = cgi.FieldStorage()
    if "name" not in form:
      self.response.write('Name not in form')
    else:
      self.response.write(form["name"].value)

app = webapp2.WSGIApplication([('/', MainPage)],debug=False)

page.html中

<html>
<body>
  <form action="http://localhost:8080" method="post">
    Name: <input type="text" name="name"/>
    <input type="submit" value="Submit"/>
  </form>
</body>
</html>

使用浏览器(Chrome)查看page.html,我在字段中输入文本并按提交,我希望看到文本显示在浏览器中,但我得到“名称不在表单中”。如果我将HTML表单方法更改为get并将python函数更改为def get(self),它可以工作,但我想使用post方法。任何有关解释的帮助都将不胜感激。

4 个答案:

答案 0 :(得分:6)

您不应该使用cgi.FieldStorage。与所有Web框架一样,Webapp2具有处理POST数据的内置方式:在这种情况下,它通过request.POST。所以你的代码应该是:

if "name" not in self.request.POST:
    self.response.write('Name not in form')
else:
    self.response.write(self.request.POST["name"]) 

请参阅the webapp2 documentation

答案 1 :(得分:2)

最好不要像

那样放置网址
  

“HTTP://本地主机:8080”

如果您使用类似

的内容
  

<强>行动= “/”

它可以在本地Web服务器(localhost:8080)和公共Web服务器(... .appspot.com)中使用

答案 2 :(得分:0)

你为什么不试试:

name = self.request.get('name')

Source

答案 3 :(得分:0)

有一个完整的示例使用表单并在入门指南中将结果提交到数据存储区:https://developers.google.com/appengine/docs/python/gettingstartedpython27/usingdatastore

处理html输出的更好方法是使用jinja 2.另请参阅入门指南。 https://developers.google.com/appengine/docs/python/gettingstartedpython27/templates 在此之后看看WTForms。