我传入的 Django 请求中的 JSON 数据在哪里?

新手上路,请多包涵

我正在尝试使用 Django/Python 处理传入的 JSON/Ajax 请求。

request.is_ajax()True 在请求中,但我不知道 JSON 数据的有效载荷在哪里。

request.POST.dir 包含这个:

 ['__class__', '__cmp__', '__contains__', '__copy__', '__deepcopy__', '__delattr__',
 '__delitem__', '__dict__', '__doc__', '__eq__', '__ge__', '__getattribute__',
'__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__',
 '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__',
'__setattr__', '__setitem__', '__str__', '__weakref__', '_assert_mutable', '_encoding',
'_get_encoding', '_mutable', '_set_encoding', 'appendlist', 'clear', 'copy', 'encoding',
'fromkeys', 'get', 'getlist', 'has_key', 'items', 'iteritems', 'iterkeys', 'itervalues',
'keys', 'lists', 'pop', 'popitem', 'setdefault', 'setlist', 'setlistdefault', 'update',
'urlencode', 'values']

请求发布密钥中显然没有密钥。

当我查看 Firebug 中的 POST 时,请求中发送了 JSON 数据。

原文由 user122299 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 343
2 个回答

如果您将 JSON 发布到 Django,我认为您需要 request.body (Django < 1.4 上的 request.raw_post_data )。这将为您提供通过邮寄发送的原始 JSON 数据。从那里你可以进一步处理它。

这是一个使用 JavaScript、 jQuery 、jquery-json 和 Django 的示例。

脚本:

 var myEvent = {id: calEvent.id, start: calEvent.start, end: calEvent.end,
               allDay: calEvent.allDay };
$.ajax({
    url: '/event/save-json/',
    type: 'POST',
    contentType: 'application/json; charset=utf-8',
    data: $.toJSON(myEvent),
    dataType: 'text',
    success: function(result) {
        alert(result.Result);
    }
});

姜戈:

 def save_events_json(request):
    if request.is_ajax():
        if request.method == 'POST':
            print 'Raw Data: "%s"' % request.body
    return HttpResponse("OK")

姜戈<1.4:

   def save_events_json(request):
    if request.is_ajax():
        if request.method == 'POST':
            print 'Raw Data: "%s"' % request.raw_post_data
    return HttpResponse("OK")

原文由 Jared Knipp 发布,翻译遵循 CC BY-SA 3.0 许可协议

我有同样的问题。我一直在发布一个复杂的 JSON 响应,但我无法使用 request.POST 字典读取我的数据。

我的 JSON POST 数据是:

 //JavaScript code:
//Requires json2.js and jQuery.
var response = {data:[{"a":1, "b":2},{"a":2, "b":2}]}
json_response = JSON.stringify(response); // proper serialization method, read
                                          // http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/
$.post('url',json_response);

在这种情况下,您需要使用 aurealus 提供的方法。阅读 request.body 并使用 json stdlib 反序列化它。

 #Django code:
import json
def save_data(request):
  if request.method == 'POST':
    json_data = json.loads(request.body) # request.raw_post_data w/ Django < 1.4
    try:
      data = json_data['data']
    except KeyError:
      HttpResponseServerError("Malformed data!")
    HttpResponse("Got json data")

原文由 stricjux 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题