Django中的空queryDict
我刚接触Django,正在创建一个简单的应用程序,用来把用户数据发送到Django服务器。不过我遇到了一个问题,关于queryDict,它是空的。我的代码是:
@csrf_exempt
def create_user(request):
"""
This function creates users
:param request: post request from front-end
:return: success/failure
"""
if request.method == 'POST':
#x = json.loads(request.POST)
print(request.POST)
return JSONResponse(request.POST)
这个POST请求是:
function post(){
xmlhttp = new XMLHttpRequest();
var url = "http://127.0.0.1:8000/create_user/";
xmlhttp.open("POST", url, true);
//xmlhttp.setRequestHeader("Content-type", "application/json");
xmlhttp.onreadystatechange = function () { //Call a function when the state changes.
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
alert(xmlhttp.responseText);
}
}
var parameters = {
"username": "myname",
"password": "mypass"
};
xmlhttp.send(JSON.stringify(parameters));
}
3 个回答
3
我来得有点晚,但我也想分享一下我的观察。你的数据会放在请求的主体部分。不过,根据你使用的Python版本,访问这些数据的方法会有所不同。在Python3及以上版本中,主体数据会以字节的形式出现,而在Python2.7中则是以字符串的形式出现。所以你需要记住你打算怎么去访问这些数据。
Python3
form_data = json.loads(request.body.decode())
Python2.7
form_data = json.loads(request.body)
7
你的JSON对象应该隐藏在 request.body
里面,这样你就可以访问这个对象的属性了:
request.body["username"]
request.body["password"]
15
你正在把数据放在请求的主体部分发送:
xmlhttp.send(JSON.stringify(parameters));
这些数据最终会出现在 request.body
里。
这和提交一个HTML表单的方式不一样,所以这些数据不会出现在 request.POST
里。如果你想模拟一个HTML表单的提交,可以看看 这个回答。