如何通过Ajax将JSON数据传递至Django视图并获取数据
Django视图接收Ajax JSON数据的修改方案
问题原因
你当前的Ajax请求是以JSON格式发送数据,但Django的request.POST仅用于解析application/x-www-form-urlencoded或multipart/form-data类型的表单数据,所以无法获取到你传递的JSON内容。
修改步骤
1. 前端Ajax代码(无需修改,确认即可)
你的Ajax代码已经正确设置了请求头和数据格式,确保items变量是你提供的发票条目数组即可:
$.ajax({ type: 'POST', url: "{% url 'get-invoice-items'%}", headers: { "X-CSRFToken": '{{ csrf_token }}' }, data: JSON.stringify(items), success: function(data) { console.log("data",data) }, contentType: "application/json", dataType: 'json', }) .done(function(response){ console.log(response) }) .fail(function(response){ console.log(response) });
2. 后端Django视图代码修改
需要读取请求体的原始数据,再解析为JSON对象:
import json from django.http import JsonResponse def get_invoice_items(request): if request.method == "POST": # 读取请求体的原始数据并解析为JSON data = json.loads(request.body) # 打印传递过来的发票条目数据 print(data) return JsonResponse({"message" : "Request Handled.."})
说明
request.body是请求的原始字节内容,通过json.loads()可以将其解析为Python字典/列表对象,也就是你传递的发票条目数组。- 如果需要对数据做进一步处理(比如验证、保存到数据库),直接操作
data变量即可。
内容的提问来源于stack exchange,提问作者Shweta Shinde
相关产品推荐
相关产品推荐

