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('提示', '数据删除错误!');
}
});
版权声明:本文为博主原创文章,未经博主允许不得转载。
猜你在找