2012-02-17 129 views
2

JSONP請求我想知道如何最好的使用Python的龍捲風來處理JSONP對象, 是最好這樣做:與龍捲風

class BaseRequest(tornado.web.RequestHandler): 
     def prepare(self): 
      self.result = {"success": True}; 
     def finish(self, chunk=None): 
      self.write(self.result); 
      tornado.web.RequestHandler.finish(self, chunk); 

這似乎是一個好主意,因爲你會覺得你可以做它在on_finish(),對吧?

那麼,我應該像上面那樣做,還是應該在我的每個處理程序中使用write()

+0

可以做什麼on_finish?這與JSONp有什麼關係? – 2012-02-20 21:27:49

+0

在'on_finish'中調用self.write(),你不能這樣做,因爲蒸汽已經關閉。因爲我的所有請求都是jsonp結果(即使它看起來不像它,但我沒有將它包含在一個暗示該函數的函數中),鍵入包含結果的變量然後寫入結果會有點令人沮喪最後10次以上。 – raser 2012-02-21 02:03:24

+0

如果你想要的話,就這樣做,但如果它只保存一行,這對我來說似乎不值得。 – 2012-02-22 11:59:32

回答

4

你應該重寫默認write方法做這樣的事情(未經測試):

class YourHandler(tornado.web.RequestHandler): 
    ... 
    def write(self, stuff): 
     super(YourHandler, self).write('callback(' + json.dumps(stuff) + ')') 
     self.set_header('Content-Type', 'application/javascript') 

其中stuff是一本字典和callback是JSONP回調名稱。

0

我在這裏比賽有點晚。 RequestHandler.write函數只是在寫入緩衝區中創建更多塊,稍後將其刷新爲字符串。

class YourHandler(tornado.web.RequestHandler): 
    ... 
    def get(self, stuff): 
     self.write("callbackname(") 
     self.write(stuff) 
     self.write(")")