Django中的空queryDict

时间:2014-03-25 08:21:04

标签: javascript python django

我是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 个答案:

答案 0 :(得分:10)

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

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

此数据最终会以request.body

结尾

这与发布HTML表单不同,因此它不会以request.POST结尾。如果要模拟HTML表单POST,请参阅this answer

答案 1 :(得分:5)

您的JSON对象应隐藏在request.body中,以便您可以访问该对象的属性:

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

答案 2 :(得分:0)

迟到这里,但让我也发表一下看法。 您的数据将进入正文。但是根据您的python版本,访问它的方法会有所不同。 因为主体数据在Python3 +中将以字节形式出现,而在Python2.7中将以字符串形式出现 因此,您必须记住如何访问它

Python3

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

Python2.7

form_data = json.loads(request.body)