解析Django中通过Ajax GET方法发送的json对象 [英] Parsing json object sent with Ajax GET method in Django

查看:469
本文介绍了解析Django中通过Ajax GET方法发送的json对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建了一个Ajax请求,该请求应由Django处理:

I have created an Ajax request which should be processed by Django:

var tracks = [{'artist':'xxx', 'track':'yyy', 'duration':100},
              {'artist':'xxx', 'track':'yyy', 'duration':100},
              {'artist':'xxx', 'track':'yyy', 'duration':100}];
$.ajax({
  type: 'GET',
  url: ROOT_URL + '/snv/',
  data: {tracks: tracks},
  dataType: 'json'
}).done(function (data) {
  // do something
}).fail(function (data) {
  // do something else
});

并且我有一个Python函数来检索该数据:

and I have a Python function to retrieve that data:

def snv(request):
    for track in request.GET:
        print track

但是此函数显示类似:

tracks[1][artist]
tracks[0][track]
tracks[0][duration]
tracks[2][artist]
tracks[1][track]
tracks[1][duration]
tracks[2][duration]
tracks[0][artist]
tracks[2][track]

如果我打印request.GET,我会得到:

If I print request.GET I get this:

<QueryDict: {u'tracks[1][artist]': [u'Artist 02'], u'tracks[0][track]': [u'title 00'], u'tracks[0][duration]': [u'202'], u'tracks[2][artist]': [u'Artist 04'], u'tracks[1][track]': [u'title 02'], u'tracks[1][duration]': [u'506'], u'tracks[2][duration]': [u'233'], u'tracks[0][artist]': [u'Artist 00'], u'tracks[2][track]': [u'title 04']}>

如何正确处理我的对象?

How to process my object properly?

推荐答案

好,我是这样解决的:

将我的Ajax请求从GET更改为POST,
跟随以获取CSRF_token,
使用解析器来解析我的对象,
最后更改了我的Python函数:

changed my Ajax request from GET to POST,
followed this to acquire CSRF_token,
used this parser to parse my object,
and finally changed my Python function:

from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def startNewVoting(request):
  from querystring_parser import parser
  p = parser.parse(request.POST.urlencode())
  for key, track in p['tracks'].iteritems():
    print track
    # save to db...

这篇关于解析Django中通过Ajax GET方法发送的json对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆