我无法从ajax请求获取数据。我可以通过Django的request.GET(和其他POST、DELETE等 header )访问数据,但不能使用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 View :
@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 returns the parsed content of the request body. This is similar to the standard
request.POST
andrequest.FILES
attributesrequest.query_params is a more correctly named synonym for
request.GET
. For clarity inside your code, we recommend usingrequest.query_params
instead of the Django's standardrequest.GET
. Doing so will help keep your codebase more correct and obvious - any HTTP method type may include query parameters, not just GET requests.
只要你通过 query parameters 将数据传入你的 View 中即可,无论您使用什么动词(GET
、POST
或任何其他动词),它们都将在您的 request.query_params
中提供request.data
。
关于python - Django Rest request.data 对象为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37161513/