【问题标题】:POST request with nested JSON parameters malformed in request.POST带有嵌套 JSON 参数的 POST 请求在 request.POST 中格式错误
【发布时间】:2018-10-12 10:09:42
【问题描述】:

在集成测试中,我尝试使用嵌套的 JSON 参数发出 POST 请求(这只是我尝试的方法之一):

test_function(admin_client):
    admin_client.post(some_url,
                      json.dumps(some_nested_json),
                      content_type='application/json',
                      headers={'Content-type': 'application/json; charset=utf-8'})

我还尝试了各种不同的参数组合等,我可以在网络上找到所有内容,但我无法在收到的request.JSON 中获得正确的 JSON 输出。

我得到以下三种情况之一:

  • request.POST 包含第一级 JSON 加上第二级 JSON keys 的数组
  • request.POST 包含第一级 JSON 加上一个空的第二级 JSON
  • request.POST 为空,但 request.body 包含整个嵌套 JSON,采用预期格式

我在这里缺少什么?我正在使用 Python 2.7

【问题讨论】:

  • 顺便说一句:停止使用 2.7,它将在 2020 年 1 月 1 日之后停止使用。 pythonclock.org
  • 遗留代码原因...

标签: python json django post pytest


【解决方案1】:

这是 django 中的预期行为。 Json 请求不在request.POST 中,而是在request.body 中。您需要在您的视图中手动执行json.loads(request.body)

【讨论】:

  • 现有代码在 request.POST 上进行嵌套 JSON 对象查找,因此 ti 必须以某种方式工作...
  • 删除 post 请求中的标头会将数据放入 request.POST
  • 是的,但这将创建我提到的第一个案例。
  • 好的,所以问题是数据是以 JSON 格式发送的,但是以字符串格式发送的。既然你的答案(和@Crystal 的)是正确的,我会接受它。
猜你喜欢
  • 1970-01-01
  • 2021-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多