#request #pyramid
#запрос #пирамида
Вопрос:
В пирамиде:
class ProjectorViews(Layouts):
def __init__(self, request):
self.request = request
@view_config(renderer="json", name="updates.json", request_method="POST")
def updates_view(self):
print self.request.params
JS:
$(function() {
function get_updates () {
data = JSON.stringify({'a':1});
$.post('/updates.json', data, function(res) {
});
}, 'json').done(function() {
});
}
get_updates();
});
Консоль показывает self.request.params
возвраты NestedMultiDict([('{"a":1}', u'')])
Как мне получить ключи и значения в объекте NestedMultiDict?
Если я это сделаю self.request.params.getall("a")
, он сообщит
KeyError: "Key not found: 'a'"
И если я это сделаю self.request.json_body
, он сообщает
ValueError: No JSON object could be decoded
Ответ №1:
$.post()
всегда отправляет данные с application/x-www-form-urlencoded
типом содержимого. Используется $.ajax()
для отправки данных с правильным типом содержимого:
$.ajax({
url: url,
type: "POST",
data: data,
contentType: "application/json; charset=utf-8",
dataType: "json"
}).done(...);
На стороне пирамиды request.json_body
— правильный способ доступа… ну, тело запроса в формате JSON.