Django:重构通过 $.post 发送的结构化参数

Posted

技术标签:

【中文标题】Django:重构通过 $.post 发送的结构化参数【英文标题】:Django: reconstruct structured parameters sent via $.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') 不起作用)

【问题讨论】:

【参考方案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')

【讨论】:

以上是关于Django:重构通过 $.post 发送的结构化参数的主要内容,如果未能解决你的问题,请参考以下文章

Django 发送手机验证码

使用 Django 通过 post 传递值

Django 项目目录重构

搭建简单Django服务并通过HttpRequester实现GET/POST请求提交表单

Django:如何在删除视图中使用 request.POST

Django中使用POST方法获取POST数据