Django+JQuery+Ajax+Post方案中的问题及解决

##遇到的问题

  • 请求发送后,服务端无响应
    Django对于POST请求会检查请求来源,表单方式提交时:

    • 在Form内添加 {% csrf_token %} 标签;
    • request响应函数前,添加 @csrf_exempt ;
  • Jquery POST 方式提交时,在服务端添加了 @csrf_exempt ,在Django1.5版本后,无法直接通过POST获取参数,通过raw_data = request.body 获取数据时,出现如下错误提示:

Exception: You cannot access body after reading from request's data stream

其实这个提示的意思是在获取body数据前,数据流已经被读过;问题就出在 @csrf_exempt 上,Django提前对request做了读取验证操作,因此问题就来了:Django服务端要接收POST请求,需要支持csrf_exempt,但添加这个前置后,又无法获取POST参数了。

  • 解决办法:不使用服务端的@csrf_exempt前置说明,前端添加csrftoken,让服务端可以接收到POST请求。

    $.ajaxSetup({ dataType: "json",
    beforeSend: function(xhr, settings){
    var csrftoken = $.cookie('csrftoken');
    xhr.setRequestHeader("X-CSRFToken", csrftoken);
    },
    });

为Ajax添加预处理,保证每次POST请求时,自动发送csrftoken,这样就可以在服务端正常处理POST数据了。


生命在于折腾~~

转载于:https://my.oschina.net/giszhang/blog/291323

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值