由于某种原因,我无法弄清楚为什么 Django 没有正确处理我的 request.body
内容。
它以 JSON
格式发送,查看开发工具中的 Network
选项卡将其显示为请求负载:
{creator: "creatorname", content: "postcontent", date: "04/21/2015"}
这正是我希望将其发送到我的 API 的方式。
在 Django 中,我有一个接受此请求作为参数的 View ,仅出于我的测试目的,应该将 request.body["content"]
打印到控制台。
当然,什么都没有打印出来,但是当我打印 request.body
我得到这个:
b'{"creator":"creatorname","content":"postcontent","date":"04/21/2015"}'
所以我知道我确实有一个 body 正在发送。
我尝试使用 json = json.loads(request.body)
也无济于事。设置该变量后打印 json
也不会返回任何内容。
最佳答案
在 Python 3.0 到 Python 3.5.x 中,json.loads()
只会接受一个 unicode 字符串,所以你必须解码 request.body
(这是一个字节string) 之前将其传递给 json.loads()
.
body_unicode = request.body.decode('utf-8')
body = json.loads(body_unicode)
content = body['content']
在 Python 3.6 中,json.loads()
accepts bytes or bytearrays .因此,您不需要解码 request.body
(假设它以 UTF-8、UTF-16 或 UTF-32 编码)。
关于python - 尝试从 Django 中的 POST 解析 `request.body`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29780060/