【问题标题】:Django: reconstruct structured parameters sent via $.postDjango:重构通过 $.post 发送的结构化参数
【发布时间】:2011-06-21 09:53:57
【问题描述】:

我正在发送一个带有结构化帖子数据的 Ajax 请求(使用 jQuery):

$.post(
    myUrl,
    {
         items: [{code: 'a', description: 'aaa'},
                {code: 'b', description: 'bbb'}]
    })

我在request.POST 看到的是:

<QueryDict: {u'items[0][code]': [u'a'],
             u'items[0][description]': [u'aaa'],
             u'items[1][description]': [u'bbb'],
             u'items[1][code]': [u'b']}>

如何处理获取原始items的请求?

(注意request.POST.get('items') 不起作用)

【问题讨论】:

    标签: jquery ajax django post


    【解决方案1】:

    我建议您将对象发布为 JSON。在 Django 中,您可以通过将 JSON 解析为 python 对象来重新创建结构。

    使用 jQuery 发布 JSON

    $.post(
        myUrl,
        JSON.stringify({
             items: [{code: 'a', description: 'aaa'},
                    {code: 'b', description: 'bbb'}]
        })
    )
    

    在 Django 视图中解析 JSON

    from django.http import HttpResponse
    from django.utils import simplejson
    
    def my_view(request):
        if request.method == 'POST':
            json_data = simplejson.loads(request.raw_post_data)
            # json_data contains your objects
            print json_data['items']
    
        return HttpResponse("Got data")
    

    【讨论】:

    • 谢谢。我采用了稍微不同的解决方案:发送items : JSON.slugify(...) 并使用simplejson.loads(request.POST['items']) 解码
    • 是的,+1,虽然我更喜欢@Don 的版本(更适合 HTTP 的键/值格式),但想法是一样的。
    • 从 Django 1.6 开始使用 request.body 而不是 request.raw_post_data。
    【解决方案2】:

    我为 Django/Python 制作了专门的库来处理通过请求发送的结构化数据。你可以在 GitHub 上找到它here

    【讨论】:

    • 好!这正是我所需要的。现在,我采用了另一种解决方案,但我将来会使用你的。谢谢。
    【解决方案3】:

    你可以试试:

    request.POST.getlist('items')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-06
      • 2019-04-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多