JSONp请求龙卷风

时间:2012-02-17 22:33:23

标签: python jsonp tornado python-2.6

我想知道在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()

2 个答案:

答案 0 :(得分: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回调名称。

答案 1 :(得分:0)

我这场比赛有点晚了。 RequestHandler.write函数只是在写缓冲区上创建了更多的块,稍后将其作为字符串刷新。

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