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
кодирует вывод и устанавливает для вас заголовок.