尝试在 Django 中解析 POST 中的“ request. body”

由于某些原因,我无法理解为什么 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也不会返回任何值。

131147 次浏览

In Python 3.0 to Python 3.5.x, json.loads() will only accept a unicode string, so you must decode request.body (which is a byte string) before passing it to json.loads().

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

In Python 3.6, json.loads() accepts bytes or bytearrays. Therefore you shouldn't need to decode request.body (assuming it's encoded in UTF-8, UTF-16 or UTF-32).