Django中如何获取POST请求携带的非表单格式JSON数据
问题原因
你的AJAX请求显式指定了contentType: 'application/json; charset=utf-8',提交的数据为JSON编码格式。Django的request.POST对象仅会自动解析application/x-www-form-urlencoded和multipart/form-data两种编码的请求数据,因此无法直接通过request.POST获取参数。
解决方案
方案1:调整前端AJAX配置,使用默认表单编码
删掉AJAX配置里的contentType: 'application/json; charset=utf-8'行即可,jQuery默认会使用表单编码提交数据,修改后的AJAX代码示例:$.ajax({ url: $basicAnalysisChart.data("url"), type: "POST", headers:{ "X-CSRFToken": csrftoken }, dataType: "json", data:{ selector1:$("#Select1").val(), selector2:$("#Select2").val() }, // 其他原有配置 })此时后端可直接通过
request.POST.get("selector1", "")获取对应参数值,注意参数名要和你提交的data里的键名一致,不要写成Select1。方案2:保持前端配置不变,后端解析JSON请求体
在Django视图中读取request.body并解析为JSON格式即可,代码示例:import json def your_view(request): if request.method == "POST": # 解析JSON格式的请求体 req_data = json.loads(request.body) # Django 3.1及以上版本可直接用下方写法替代上一行,无需手动导入json模块 # req_data = request.json() selector1 = req_data.get("selector1", "") selector2 = req_data.get("selector2", "") # 后续业务逻辑
内容的提问来源于stack exchange,提问作者Felix_
相关产品推荐
相关产品推荐

