JSONp запросы с торнадо - PullRequest
2 голосов
/ 18 февраля 2012

Мне интересно, как лучше всего обрабатывать объекты JSONp, используя торнадо в python, лучше ли это сделать:

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 ]

4 голосов
/ 24 июля 2012

Вы должны переопределить метод 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 голосов
/ 06 февраля 2014

Я немного опоздал на игру здесь. Функция RequestHandler.write просто создает больше фрагментов в буфере записи, который позже сбрасывается в виде строки.

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