Как получить данные json из post-запроса в Pyramid?

#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.