AJax技术

ExtJs通过AJAX发送Post给django后台报错403!

字号+ 作者:H5之家 来源:H5之家 2015-10-16 12:31 我要评论( )

报错403是因为django自动开启了CSRF防御!在settings里的设置

ExtJs通过AJAX发送Post给django后台报错403!

ExtJs通过AJAX发送Post给django后台报错403!,有需要的朋友可以参考下。


报错403是因为django自动开启了CSRF防御!

在settings里的设置 'django.middleware.csrf.CsrfViewMiddleware',自动开启全局CSRF防御。

如果你是jQuery在页面js里发送ajax可以参考文章:

------------------------------------------------------------------------------------------------------------------------------------------------------

本文记录extjs在处理csrf防御步骤:

1.首先必须在浏览器请求页面的时候返回给浏览器的view层方法上加入@ensure_csrf_cookie 以便让浏览器cookie记录token

例如:

from django.views.decorators.csrf import requires_csrf_token,ensure_csrf_cookie

@ensure_csrf_cookie
def Login(request):
# ...
return render_to_response('AdminPool/Login.html', {})

2.然后再页面的js里,在发送ajax之前事件:

Ext.Ajax.on('beforerequest', function (conn, options) {
if (!(/^http:.*/.test(options.url) || /^https:.*/.test(options.url))) {
if (typeof(options.headers) == "undefined") {
options.headers = {'X-CSRFToken': Ext.util.Cookies.get('csrftoken')};
} else {
options.headers.extend({'X-CSRFToken': Ext.util.Cookies.get('csrftoken')});
}
}
}, this);

设置请求头heades的‘X-CSRFToken’。

3.然后发送AJAX的post:


Ext.Ajax.request({
url: 'tianwanggaidihu',
method: 'POST',
success: function (response, opts) {
var responseJson = Ext.JSON.decode(response.responseText);
// 当后台数据同步成功时
if (responseJson.IsError) {
Ext.MessageBox.show({
title: "提示",
msg: "数据删除失败!"
});
} else {
store.remove(data[0]);// 页面效果
Ext.MessageBox.show({
title: "提示",
msg: "数据删除成功!"
});
}
},
failure: function (response, options) {
Ext.MessageBox.alert('提示', '数据删除错误!');
}

});

版权声明:本文为博主原创文章,未经博主允许不得转载。

猜你在找

  • ROS运行python脚本报错ImportError: No module named srv
  • Python开发环境配置(Windows)
  • [置顶] 如何创建Python工程目录

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    网友点评