CherryPy Как ответить JSON?

В моем контроллере/обработчике запросов у меня есть следующий код:


def monkey(self, **kwargs):
  cherrypy.response.headers['Content-Type'] = "application/json"
  message = {"message" : "Hello World!" }
  return message
monkey.exposed = True

И, на мой взгляд, у меня есть этот javascript:


$(function() {
  var body = document.getElementsByTagName("body")[0];
  $.ajaxSetup({ 
    scriptCharset : "utf-8",
    contentType: "application/json; charset=utf-8"
  });
  $.post("http://localhost/wsgi/raspberry/monkey", "somePostData",
    function(data) {
      try{
        var response = jQuery.parseJSON(data);
        body.innerHTML += "<span class='notify'>" + response + "</span>";
      }catch(e){ 
        body.innerHTML += "<span class='error'>" + e + "</span>";
      }
    }
  );
});

И, наконец, вот моя проблема. Я не получаю ответа от JSON, и я не уверен, почему.

Во-вторых, сможет ли кто-нибудь объяснить, как форматировать данные в моем ответе контроллера/запроса-обработчика как ответ JSON самым простым способом, без использования инструментов?

Ответы

Ответ 1

Не уверен, что вы подразумеваете под "без использования инструментов" - Python есть "инструмент", правильно?

Только с Python и его стандартной библиотекой (2.6 или выше) добавьте вверху своего модуля

import json

и измените оператор return на

return json.dumps(message)

Ответ 2

Обратите внимание, что в CherryPy 3.2 (почти сделано!) будет пара инструментов JSON, чтобы сделать это еще проще:

@cherrypy.expose
@tools.json_out()
def monkey(self, **kwargs):
    return {"message": "Hello World!"}

json_out кодирует вывод и устанавливает для вас заголовок.