我有一个非常简单的视图,它接收包含javascript对象的ajax请求。 jquery请求如下所示:
$.get(URL, {'kwargs': {test: 1}}, function(data){//whatever})
问题是,request.GET现在包含一个相当奇怪的键,看起来像这样:
{'kwargs[test]': [1]}
如何成功解码?作为旁注,事先不可能知道密钥(测试)
获得的预期格式是一个python dict,看起来像请求中的那个。
我试过了:
request.GET.get('kwargs', None)
我期待这样做:
{'test': 1}
然而,我得到了无,因为真正的关键是' kwargs [test]'
修改
我知道我可以使用某种正则表达式来实现这一目标,但感觉就像重新发明轮子一样,因为这个用例并不罕见
答案 0 :(得分:5)
在这种情况下,我建议在服务器和客户端之间来回通信时使用JSON。 JSON旨在以统一的方式处理这些类型的嵌套结构。
看一下使用jQuery $ .getJSON功能, http://api.jquery.com/jquery.getjson/
以下是此结构外观的示例......
Javscript
var request_data = {kwargs: {test: 1}};
$.getJSON(URL, {data: JSON.stringify(request_data)}, function(data){//whatever})
Django的
import json
def your_view(request):
my_json = json.loads(request.GET['data'])
执行此操作将允许您将包含JSON数据的请求解析为您选择的变量(my_json)。一旦为变量分配了json.loads()的结果,现在您将拥有一个包含已解析的请求JSON数据的python对象,您将能够相应地操作您的对象。
>>> my_json['kwargs']
{u'test': 1}