【问题标题】:Django Rest request.data object emptyDjango Rest request.data 对象为空
【发布时间】:2016-09-06 18:55:24
【问题描述】:

我无法从 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')    

【问题讨论】:

    标签: python ajax django django-rest-framework


    【解决方案1】:

    来自 Django-REST-framework documentation:

    request.data 返回请求正文的解析内容。这类似于标准的request.POSTrequest.FILES 属性

    request.query_paramsrequest.GET 的更正确命名的同义词。 为了使您的代码更加清晰,我们建议使用request.query_params 而不是Django 的标准request.GET。这样做将有助于使您的代码库更加正确和明显 - 任何 HTTP 方法类型都可能包含查询参数,而不仅仅是 GET 请求。

    只要您通过query parameters 将数据传递到您的视图中,无论您使用何种动词(无论是GETPOST 还是任何其他),它们都将在您的request.query_params 中可用,而不是request.data.

    【讨论】:

    • 感谢您的回答和补充说明。问题在一秒钟内解决。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-17
    • 1970-01-01
    • 2017-05-09
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    • 2022-11-17
    相关资源
    最近更新 更多