jqueryajax发布到Django视图

jqueryajax发布到Django视图,jquery,django,post,Jquery,Django,Post,我试图找出将post数据发送到Django视图函数的最佳方法 我目前在jquery代码中的内容如下: var name = 'Joe'; var age = 20; $.ajax({ url:"/do_something/", type: "POST", data: {name: name, age: age}, success:function(response){}, complete:function(){}, error:function

我试图找出将post数据发送到Django视图函数的最佳方法

我目前在jquery代码中的内容如下:

var name = 'Joe';
var age = 20;

$.ajax({
    url:"/do_something/",
    type: "POST",
    data: {name: name, age: age},
    success:function(response){},
    complete:function(){},
    error:function (xhr, textStatus, thrownError){
        alert("error doing something");
    }
});
def do_something(request):
    if request.POST:
        name = request.POST.getlist('name')[0]
        age = request.POST.getlist('age')[0]
数据以QueryDict对象的形式到达Django:

<QueryDict: {u'name': [u'Joe'], u'age': [u'20']}>
作为将post数据从jquery传递到django的一种方式,这感觉有点错误(通过getlist访问post数据,然后获取列表中的第一个元素)。有更好的发送数据的方法吗?

这可能是实现这一点的“正确方法”,尽管它并不轻松

您可以使用[]符号从HttpRequest对象的POST列表中读取JSON数据,例如:

JSONdata = request.POST['data']
然后解码JSON数据:

dict = simplejson.JSONDecoder().decode( JSONdata ) 
最终,您的所有JSON数据都将保存在dict变量中。用法示例:

username = dict['name']

为什么您需要使用
getlist
?Django的QueryDict对象对所有项目都使用列表,但是一个简单的
get
——甚至是正常的字典访问——总是获取第一个项目。因此:

name = request.POST['name']
很好


另外,我不理解您首先构建JS对象的方式。
“+name
的意义是什么?为什么不干脆
{name:name,age:age}

您可以创建一个表单,并将保存此数据的代码放入.save方法。这样,您也可以免费获得验证。如果在一个视图中对request.POST和validation进行多次查找,则可能以错误的方式分离了关注点

如果您只想将此数据保存到模型中,请使用类(您可以仅使用模型的某些字段创建表单)

表单的另一个好处是,您可以在页面中呈现表单,并使用插件通过ajax提交表单,而无需手动推送任何数据:

$('#personform').ajaxForm({
    success: function one,
    error: function two
})

说到你的第一点——不,不是。至于你的第二点——很公平。我删除了“+”。你说“不,不是”是什么意思?发生了什么事?你是如何获得视图的?你做了什么事情来获得呼叫?我正在做一些类似的事情,但是当调用do_something时,它没有到达url.py。我一直在寻找。
$('#personform').ajaxForm({
    success: function one,
    error: function two
})