python - django获取ajax POST过来的数据时失败
本文介绍了python - django获取ajax POST过来的数据时失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
前端代码是这样的
<script>
var csrftoken = Cookies.get('csrftoken');
function csrfSafeMethod(method) {
// these HTTP methods do not require CSRF protection
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajaxSetup({
beforeSend: function (xhr, settings) {
if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
}
});
console.log(csrftoken);
function login() {
alert($("#username").val());
$.ajax({
url: "../auth",
type: "post",
headers: {'Content-Type': 'application/json',"X-CSRFToken":csrftoken},
data: JSON.stringify({
username:$("#user_name").val(),
password:$("#password").val()
})
}).done(function (data) {
}).fail(function () {
alert("请求失败");
});
}
</script>
跨域访问什么的都已经通过加上X-CSRFToken解决了。
然后后端的view是这样写的:
@require_http_methods(["POST"])
def auth(request):
word=request.POST.get('username','123')
return HttpResponse(word)
结果得到的response数据是123,也就是说request.POST.get('username','123')这里面读取不到username的值?
请问是为什么啊
解决方案
我最终找到解决方法了,并不是因为前端加了JSON.stringify
的问题。
如果不加JSON.stringify
,那么前端传来的request的body就是"username"="test","password"="123"
了。而且,即便是换成了这样的CGI格式的请求,后端还是取出不了数据。
所以我换成了直接自己去解析request.body
(这里有个小坑,就是需要先decode()
一下),然后就能正常拿到请求的json了。
代码如下:
import json
@require_http_methods(["POST"])
def auth(request):
user_obj=json.loads(request.body.decode())
return HttpResponse(user_obj['username'])
不过还是感谢各位的帮助!
这篇关于python - django获取ajax POST过来的数据时失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文