我有一个动态更新的表单,当它提交时,我正在尝试将数据发布到一个视图函数并获得响应。这是我的模板文件:
$("#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,但我从未遇到过这个错误。
答案 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。