python - Google App Engine 中的 cgi.test()

标签 python google-app-engine post cgi

我目前正在学习使用 Google App Engine ,我修改了this example看起来像这样:

import cgi
import webapp2

from google.appengine.api import users

class MainPage(webapp2.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(webapp2.RequestHandler):
    def post(self):
        cgi.test()

app = webapp2.WSGIApplication([('/', MainPage),
                              ('/sign', Guestbook)],
                              debug=True)

因为我想看看cgi.test() 做了什么。它生成与 Python documentation 中的描述相匹配的输出。 ,但它错误地表示没有 POST 数据。此外,它还通知以下错误:

  File "C:\Python27\lib\cgi.py", line 918, in test
    print_environ(environ)
  File "C:\Python27\lib\cgi.py", line 944, in print_environ
    print "<DT>", escape(key), "<DD>", escape(environ[key])
  File "C:\Python27\lib\cgi.py", line 1035, in escape
    s = s.replace("&", "&amp;") # Must be done first!
AttributeError: 'LogsBuffer' object has no attribute 'replace'

这是在本地主机开发环境上。为什么我得到的结果不正确?该示例指出,并非所有 Python 函数都被允许,但我怀疑 cgi.test() 会出现这种情况,不是吗?

编辑:我是否必须以某种方式更改 app.yaml 才能对 http://localhost:8080/sign 进行特殊处理?

最佳答案

问题在于 wsgi.errors(和 wsgi.input)的值是实际实例: 例如它是这样的:

'wsgi.errors': <google.appengine.api.logservice.logservice.LogsBuffer object at 0x105219150>

而不是它的字符串表示形式,转义方法只能在字符串上调用。

(肮脏的黑客) 找到文件 google/appengine/runtime/request_environment.py(我不提供完整路径,因为我不知道您的安装位置),然后在第 111-112 行:

替换:

def __getitem__(self, key):
    return self._request.environ[key]

与:

def __getitem__(self, key):
    if key in ['wsgi.errors', 'wsgi.input']:
        return str(self._request.environ[key])
    return self._request.environ[key]

关于python - Google App Engine 中的 cgi.test(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12130838/

相关文章:

java - Google App Engine (GAE) 上的高性能 Java 对象序列化

javascript - jQuery post - 等待响应

python - 如何查询引用属性?

PHP 从 AJAX post 获取数据并过滤它

jquery .post with $ ("html".html(data), body css 不工作

python 无法导入时区,但可以导入日期时间

python - 显示弹出消息 OpenERP V6

python - 从另一个线程调用一个扭曲的协议(protocol)方法

python - 如何引用 numpy 数组的切片/ View

google-app-engine - 如何使用 AppEngine 和 Datastore 生成大文件(PDF 和 CSV)?