2
添加仅修改HTTP标头(如FirePython)的中间件非常简单,但当您调用webapp.WSGIApplication(environ,start_response)时,它将返回[ “”]代替可迭代与主体:如何向AppEngine添加修改响应主体的WSGI中间件
def __call__(self, environ, start_response):
...
response.wsgi_write(start_response)
return ['']
response.wsgi_write实际上是负责打印体的:
def wsgi_write(self, start_response):
...
write = start_response('%d %s' % self.__status, self.__wsgi_headers)
write(body)
self.out.close()
这使得难以由WSGI中间件修改身体。通常我会这样做:
class Upperware:
def __init__(self, app):
self.wrapped_app = app
def __call__(self, environ, start_response):
for data in self.wrapped_app(environ, start_response):
return data.upper()
但是这不起作用,因为wrapped_app的返回值是['']。我怎样才能让Upperware中间件在Google AppEngine中工作?什么是设计决定,导致写回应而不是返回它?
感谢您的回复。 WRT错误报告,已完成http://code.google.com/p/googleappengine/issues/detail?id=4244 – 2010-12-13 11:33:51