Py学习  »  问与答

Django ajax post {%csrf_token%}的问题究竟怎么解决?

SAMZZZ • 9 年前 • 4882 次点击  

这个问题搞得我好苦恼,网上查了一大堆答案,结果没有能解决的(可能是因为我的代码错了)。希望大家能帮我解答这个问题。问题描述如下: 一开始写js,我是这样天真的写的。

function getModifiedDistrict(id,name){
district_id= id;
district_name= name;
$(".col-md-9").empty();
var str=" <form action='' method='post' class='form-horizontal'>"+
"{% csrf_token %}"+
" <div class='form-group'>"+
"   <label for='areaname' class='control-label col-md-2'>校区名</label>"+
"       <div class='col-md-4'>"+
"           <input type='text' value='"+district_name+"' autofocus='autofocus' class='form-control' id='modifyDistrict'/>"+
"       </div>"+
"   </div>"+
" <div class='form-group col-md-2'>"+
"   <input type='submit'  style='margin-left: 329px;' class='btn btn-primary' value='保存修改'>"+
"</div>"+
"</form>";
$(".col-md-9").append(str);

} 结果,当然就是错了。网页把"{% csrf_token %}"当作一个要显示在网页上的字符来处理了,而且没有达到POST的功能。后来改用ajax,如下:

function getModifiedDistrict(id,name){
district_id= id;
district_name= name;
$(".col-md-9").empty();
var str=" <form action='' method='post' class='form-horizontal'>"+
" <div class='form-group'>"+
"   <label for='areaname' class='control-label col-md-2'>校区名</label>"+
"       <div class='col-md-4'>"+
"           <input type='text' value='"+district_name+"' autofocus='autofocus' class='form-control' id='modifyDistrict'/>"+
"       </div>"+
"   </div>"+
" <div class='form-group col-md-2'>"+
"   <input type='submit'  style='margin-left: 329px;' class='btn btn-primary' onclick= modifyDistrict(district_id, district_name) value='保存修改'>"+
"</div>"+
"</form>";
$(".col-md-9").append(str);}

function modifyDistrict(id, name){
district_id= id;
district_name= name;
$.ajaxSend({
    url:'setupAjax/updateDistrictActionAjax.action',
    type:'post',
    dataType:'json',
    data:{"district_id":district_id,"district_name":$("#modifyDistrict").val()},
    success:function(result){
        if(result.result=='success')
        alert('修改成功!');
        else alert('修改失败!'+ result.errorMsg);

        $(".tab-pane").empty();
        getModifiedDistrict();
    },
    error:function(){
        alert('服务器错误');
    }
});

}

接下来就出现了重要的问题:因为用了POST,而且无法像模板那样加"{% csrf_token %}",所以出现:Forbidden (403) CSRF verification failed. Request aborted。 据说是有办法在ajax里面处理csrftoken的,但是究竟该怎么解决呢?希望大家能够针对我的代码进行解答,谢谢~~~这个问题搞得我真的很苦恼。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/1500
 
4882 次点击  
文章 [ 7 ]  |  最新文章 9 年前