【问题标题】:Django Rest API POST issuesDjango Rest API POST 问题
【发布时间】:2016-02-20 11:35:22
【问题描述】:

我正在尝试在 Django 1.8 中使用 Visual Studio 中的 Django REST Framework 构建一个非常简单的 REST API,我希望在其中使用单一服务方法来处理 JSON,但我似乎无法进行 POST :

我正在尝试通过 Postman 发送这个简单的 JSON,作为测试:

{
   "foo":"bar"
}

带有标题:

Content-Type: application/json

这是我的方法:

@csrf_exempt
@api_view(['POST'])
def test(request):
    data = request.data
    return HttpResponse(status=200)

但我的问题是 request.data 是空的。如果我尝试访问 request.body,我会得到 ​​p>

从请求的数据流中读取后,您无法访问正文。

有什么想法可能是这里的问题吗?

【问题讨论】:

  • 你试过request.POST吗?
  • 是的,同样的,它是一个空的 QueryDict。

标签: python django rest django-rest-framework


【解决方案1】:

有点想通了,这似乎是 Visual Studio 在调试模式下的问题。如果我在调用任何 Python 函数之前尝试在调试时访问该请求(例如简单的打印,或传递给一个函数来解析它),它会显示为一个空的 QueryDict,否则它会显示正常。

【讨论】:

    【解决方案2】:

    只是猜测:也许问题出在 Postman 上?

    尝试发送不带标头但使用原始 JSON(不是表单数据)的 POST 请求:

    【讨论】:

    • 我正是这样做的,但标头设置为 Content-Type: application/json.没有标头,request.POST 仍然是空的 QueryDict,而 request.data 给我“请求中不支持的媒体类型“text/plain;charset=UTF-8”。”
    【解决方案3】:

    这可能对Where's my JSON data in my incoming Django request?有帮助

    除此之外,请确保正确设置了内容类型和接受类型。 Postman 的原始响应是什么?安全设置是否正确?

    【讨论】:

    • 因为我只尝试读取 JSON 而没有其他内容,所以原始响应返回 200 OK,正如预期的那样。它在 localhost 上运行,与默认项目没有任何变化,因此它不应该是一个安全问题。解析器将我的内容类型识别为 JSON,但内容显示为空。
    • 这太简单了,但是您确认您的单元测试产生了有效的 JSON 结果吗?您希望它返回什么?
    • 这与单元测试无关,我通过 Postman 手动发帖,生成有效的 JSON。
    【解决方案4】:

    我在使用 POSTMAN 时遇到了同样的问题。

    已解决并感谢 https://stackoverflow.com/a/31977373/764592

    引用答案:

    请求负载未转换为 JSON 格式。

    我将 Body 中的数据作为 x-www-form-urlencoded

    传递

    您可以通过在请求标头中使用 Content-Type 作为 application/x-www-form-urlencoded 来修复它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-12
      • 1970-01-01
      • 2021-12-29
      • 2019-06-22
      • 2017-11-05
      • 1970-01-01
      • 1970-01-01
      • 2019-04-01
      相关资源
      最近更新 更多