尝试从 Django 中的 POST 解析 `request.body`

Trying to parse `request.body` from POST in Django

出于某种原因,我不明白为什么 Django 没有正确处理我的 request.body 内容。

它以 JSON 格式发送,查看 Dev Tools 中的 Network 选项卡显示这是请求负载:

{creator: "creatorname", content: "postcontent", date: "04/21/2015"}

这正是我希望它发送到我的 API 的方式。

在 Django 中,我有一个视图接受此请求作为参数,仅出于测试目的,应该将 request.body["content"] 打印到控制台。

当然,什么也没有打印出来,但是当我打印 request.body 时,我得到了这个:

b'{"creator":"creatorname","content":"postcontent","date":"04/21/2015"}'

所以我知道我 有一个 body 正在发送。

我试过使用 json = json.loads(request.body) 也无济于事。设置该变量后打印 json 也 returns 什么都没有。

在Python 3.0到Python 3.5.x中,json.loads()只会接受一个unicode字符串,所以你必须解码request.body(这是一个字节字符串),然后将其传递给 json.loads().

body_unicode = request.body.decode('utf-8')
body = json.loads(body_unicode)
content = body['content']

在Python3.6中,json.loads() accepts bytes or bytearrays。因此,您不需要解码 request.body(假设它以 UTF-8、UTF-16 或 UTF-32 编码)。