我正在使用这个中间件让我的应用程序变得安静,但看起来我的表单参数没有通过:
from google.appengine.ext import webapp
class RestHTTPMiddleware(object):
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
method = webapp.Request(environ).get('_method')
request = Request(environ)
environ['wsgi.input'] = StringIO.StringIO(request.body)
if method:
environ['REQUEST_METHOD'] = method.upper()
return self.app(environ, start_response)
当我提交表单并使用以下方法进行调试时:
def put(self):
logging.debug(self.request.get('description'))
记录器为空。正在调用put(self)方法,我使用记录器对其进行了测试,并显示了我的调试消息。
第二次修订:
from google.appengine.ext import webapp
from webob import Request
import logging
import StringIO
class RestHTTPMiddleware(object):
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
request = Request(environ)
environ['wsgi.input'] = StringIO.StringIO(request.body)
method = webapp.Request(environ).get('_method')
if method:
environ['REQUEST_METHOD'] = method.upper()
return self.app(environ, start_response)
最新变化:
from google.appengine.ext import webapp
from webob import Request
import logging
import StringIO
class RestHTTPMiddleware(object):
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
request = Request(environ)
body = StringIO.StringIO(request.body)
method = webapp.Request(environ).get('_method', None)
if method:
environ['REQUEST_METHOD'] = method.upper()
environ['wsgi.input'] = body
return self.app(environ, start_response)
答案 0 :(得分:4)
实例化webapp.Request并在其上调用.get使其读取请求主体并解析其中的表单参数。当您的实际webapp稍后启动时,它会实例化另一个请求对象,并再次尝试读取请求正文 - 但它已被读取,因此不会返回任何内容。
您可以修改中间件以存储请求正文的副本并将其放回WSGI环境中。还有其他选择: