我无法从ajax请求中获取数据。我可以通过Django的request.GET(以及其他POST,DELETE等标头)访问数据,但不能使用REST request.data(或request.body)来返回数据空字典
我的ajax电话:
function getMeal(event)
{
var tmp = event._id.split("_")
var database = tmp[0]
var mealId = tmp[1]
$.ajax(
{
type: "GET",
url: "{% url 'updateEatenMealAjax' %}",
data:
{
'database': database,
'mealId' : mealId,
},
success: function(data, textStatus, jqXHR)
{
$('#update_EatenMeal_FormBody').html(data);
},
dataType : 'html',
async: 'false',
contentType: 'application/json'
});
}
我的django视图:
@login_required
@api_view(["PUT", "GET", "DELETE"])
@csrf_protect
@ensure_csrf_cookie
def updateEatenMealAjax(request):
args = {}
eaten_object = None
# WHICH DATABASE DOES THIS FOOD ITEM BELONG TO
database = request.data.get('database')
mealId = request.data.get('mealId')
最佳答案
从Django-REST-framework documentation:
request.data返回请求正文的解析内容。这类似于标准的request.POST
和request.FILES
属性
request.query_params是request.GET
的更正确命名的同义词。
为了使代码内部更清晰,我们建议使用request.query_params
而不是Django的标准request.GET
。这样做有助于使您的代码库更加正确和明显-任何HTTP方法类型都可以包括查询参数,而不仅仅是GET请求。
只要您通过query parameters将数据传递到视图中,无论使用什么动词(无论是GET
,POST
还是其他任何动词),它们都将在您的request.query_params
中提供,而不是在request.data
中使用。