2010-09-12 165 views
1

我如何才能将请求正文传递给我的视图?谷歌应用程序引擎_method?

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) 

当我测试:

def put(self): 
    logging.info("spot put %s", self.request.get("name")) 

以下记录: “点放”,但没有价值。

这是它是如何实现的:

def main(): 
    app = webapp.WSGIApplication([ 
    (r'/spot/new/$', Spot), 
    ], 
    debug=True) 
    # run_wsgi_app(application) 
    wsgiref.handlers.CGIHandler().run(RestHTTPMiddleware(app)) 
+0

你为什么要这么做?为什么不只是访问self.request.body? – 2010-09-13 10:09:42

+0

我希望能够在webapp中使用put()和delete()方法,一种方法是使用形式为 – 2010-09-13 11:54:29

+0

如果它是输入[type = hidden],则表示您将其设置为代码中的值。相反,将相应的方法设置为“

>。 – Xion 2010-10-08 12:53:35

回答

0

就快与此代码,我想。如果在Request实例创建后运行fp.seek(0),您是否尝试了解它是否有效?

我还应该注意,这是一个危险的黑客!这使我可以欺骗您的Web服务器,使其相信<img src="http://yourserver.com/?_method=POST&delete_account=1">是来自查看我网站的用户的合法POST请求。显然:从安全角度来看这是危险的。 不要这样做,除非你确定你有其他机制抵消这个潘多拉盒子的CSRF噩梦。