我如何通过django中的ajax发布数据?

时间:2014-03-21 17:10:25

标签: javascript jquery python ajax django

我有一个动态更新的表单,当它提交时,我正在尝试将数据发布到一个视图函数并获得响应。这是我的模板文件:

$("#myForm").submit(function(){
    event.preventDefault();
    var msg = '';
    for(var i=1; i<counter; i++){
        msg += "\n Textbox #" + i + " : " + $('#textbox' + i).val();
    }

   $.post("/results/", {'data', msg},function(res) {
   console.log("Got a result", res);

  });
});

表单部分:

<form name="myForm" id="myForm" method="POST" action="">{%  csrf_token %}
          <div class="modal-body">

            <div id='TextBoxesGroup'>
                <div id="TextBoxDiv1">
                    <label>Textbox #1 : </label><input type='text' id='textbox1' class="form-control" placeholder="Body Text">
                </div>
            </div><br/>

            <input type='button' value='Add Button' id='addButton' class="btn btn-primary">
            <input type='button' value='Remove Button' id='removeButton' class="btn btn-primary">

          </div>
          <div class="modal-footer">
            <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
            <input type="submit" class="btn btn-primary" id='getButtonValue' value="Save Changes">

          </div>
        </form>

urls.py文件:

(r'^results/$', views.results),

这是视图功能:

def results(request):
    if request.is_ajax() and request.method == POST:
        name = request.POST['name']
        #add the post data to database.
        return HttpResponse("Thanks! Successfully updated!")
    else:
        sys.exit(1) # print some error message

我收到403禁止错误。我之前使用过ajax,但我从未遇到过这个错误。

2 个答案:

答案 0 :(得分:0)

文档explains如何在Ajax中使用跨站点请求伪造保护。

答案 1 :(得分:0)

默认情况下,Django通过使用称为CSRF令牌的东西来验证POST请求,以防止跨站点脚本攻击。

为了使您的脚本正常工作,您需要将CSRF令牌作为参数传递,方法是从用户的cookie中检索它或在表单视图中使用以下代码

<form action="." method="post">{% csrf_token %}  

您可以在https://docs.djangoproject.com/en/1.6/ref/contrib/csrf/#how-to-use-it

找到更多说明和详细信息

或者,您将@csrf_exempt装饰器放在def results(request):上方的行上,以禁用该特定视图的csrf。