Django+JQuery+Ajax+Post方案中的问题及解决
遇到的问题
请求发送后,服务端无响应
Django对于POST请求会检查请求来源,表单方式提交时:- 在Form内添加
`{% csrf_token %}
` 标签; - request响应函数前,添加
`@csrf_exempt
` ;
- 在Form内添加
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数据了。
生命在于折腾~~
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。