CherryPy как реагировать с JSON?
в моем контроллере / обработчике запросов у меня есть следующий код:
def monkey(self, **kwargs):
cherrypy.response.headers['Content-Type'] = "application/json"
message = {"message" : "Hello World!" }
return message
monkey.exposed = True
и, на мой взгляд, у меня есть код:
$(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 самым простым способом, без использования инструментов?
2 ответов
не уверен, что вы подразумеваете под "без использования инструментов" - в Python is "инструмент", верно?
только с Python и его стандартной библиотекой (2.6 или лучше), добавьте в верхней части вашего модуля
import json
, и return
заявление
return json.dumps(message)
поскольку CherryPy 3.2 есть инструменты для приема / возврата JSON:
@cherrypy.expose
@cherrypy.tools.json_out()
def monkey(self, **params):
return {"message": "Hello World!"}
используя json_out
сериализует вывод и задает соответствующий заголовок типа контента для вас.
аналогично украшения с @cherrypy.tools.json_in()
может автоматически принимать / декодировать запросы JSON post.