2010-09-12 162 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噩夢。