一尘不染

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

django

由于某种原因,我无法弄清楚为什么Django无法request.body正确处理我的内容。

它以JSON格式发送,查看Network开发工具中的选项卡将其显示为请求有效负载:

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

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

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

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

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

所以我知道我确实有尸体被寄出。

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


阅读 1121

收藏
2020-04-02

共1个答案

一尘不染

在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']

在Python 3.6中,json.loads()接受bytes或bytearrays。因此,你不需要解码request.body(假设它以UTF-8,UTF-16或UTF-32编码)。

2020-04-02