【问题标题】:Empty queryDict in DjangoDjango中的空查询字典
【发布时间】:2014-03-25 08:21:03
【问题描述】:

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

【问题讨论】:

    标签: javascript python django


    【解决方案1】:

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

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

    然后这些数据将在request.body 中结束。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 您必须先通过 data = json.loads(request.body) 解析值,然后您可以通过属性名称访问它。例如:数据[“用户名”]
      【解决方案3】:

      来晚了,但我也谈谈我的观察。 您的数据将进入正文。但是根据您的 python 版本,访问它的方法会有所不同。 因为正文数据在 Python3+ 中以字节形式出现,在 Python2.7 中以字符串形式出现 所以你必须记住你将如何访问它

      Python3

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

      Python2.7

      form_data = json.loads(request.body)
      

      【讨论】:

        猜你喜欢
        • 2018-12-05
        • 2020-07-16
        • 2015-11-28
        • 1970-01-01
        • 2016-05-23
        • 1970-01-01
        • 2021-05-31
        • 1970-01-01
        • 2019-09-10
        相关资源
        最近更新 更多