Django中的空queryDict

7 投票
3 回答
12957 浏览
提问于 2025-04-17 23:47

我刚接触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表单的提交,可以看看 这个回答

撰写回答