queryDict在Django中为空

Empty queryDict in Django

本文关键字:Django queryDict      更新时间:2023-09-26

我是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));
}

您正在发送请求正文中的数据:

xmlhttp.send(JSON.stringify(parameters));

该数据最终将在request.body .

这与post HTML表单不一样,所以它不会在request.POST中结束。如果您想模拟HTML表单POST,请参阅此答案。

你的JSON对象应该隐藏在request.body中,这样你就可以访问对象的属性:

request.body["username"]
request.body["password"]

来晚了,但我也要发表一下我的看法。你的数据会进入身体。但是根据您的python版本,访问它的方法会有所不同。因为主体数据在Python3+中以字节的形式出现,在Python2.7中以字符串的形式出现所以你要记住如何访问它

Python3

form_data = json.loads(request.body.decode())

Python2.7

form_data = json.loads(request.body)