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服务并通过HttpRequester实现GET/POST请求提交表单