试图在Django中从POST解析`request.body`

时间:2015-04-21 18:14:32

标签: python json django python-3.x backbone.js

出于某种原因,我无法弄清楚为什么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"}'

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

我尝试使用json = json.loads(request.body)也无济于事。设置该变量后打印json也不会返回任何内容。

1 个答案:

答案 0 :(得分:115)

在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'] (字节串)。

request.body

在Python 3.6中,json.loads() accepts bytes or bytearrays。因此,您不需要解码{{1}}(假设它以UTF-8,UTF-16或UTF-32编码)。