Django Ajax POST请求失败解决办法

Django到了1.2.5版本以上,Ajax POST请求的使用发生了一些改变,我们还记得前些版本1.2,Django加入了CSRF机制,大大增强了网络请求的安全性,正是因为这点,现在的Django对页面任何POST请求的数据进行跨域攻击保护。当你升级到1.2.5或更高版本后,你会发现以前1.2.4版本的Ajax POST脚本方法都不能用或者出错了,Django官网上提供了一个解决办法,加个JQuery ajaxSend事件,让你以前的Ajax Post脚本能重新正常使用起来。请看代码:

$('html').ajaxSend(function(event, xhr, settings) {
     function getCookie ( name ) { 
         var cookieValue = null ; 
         if ( document . cookie && document . cookie != '' ) { 
             var cookies = document . cookie . split ( ';' ); 
             for ( var i = ; i < cookies . length ; i ++ ) { 
                 var cookie = jQuery . trim ( cookies [ i ]); 
                 // Does this cookie string begin with the name we want? 
                 if ( cookie . substring ( , name . length + 1 ) == ( name + '=' )) { 
                     cookieValue = decodeURIComponent ( cookie . substring ( name . length + 1 )); 
                     break ; 
                 } 
             } 
         } 
         return cookieValue ; 
     } 
     if ( ! ( /^http:.*/ . test ( settings . url ) || /^https:.*/ . test ( settings . url ))) { 
         // Only send the token to relative URLs i.e. locally. 
         xhr . setRequestHeader ( "X-CSRFToken" , getCookie ( 'csrftoken' )); 
     } 
});
 
把以上的代码 放在你使用Ajax POST 请求的页面上。
 
参考文档:
http://docs.djangoproject.com/en/dev/ref/contrib/csrf/#csrf-ajax
http://docs.djangoproject.com/en/dev/releases/1.3/#csrf-exception-for-ajax-requests

转载需注明:baoyalv 原创文章 http://2goo.info/blog/baoyalv/Django/2011/03/12/509

转载于:https://my.oschina.net/tenking/blog/29138

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值