出于某种原因,我无法弄清楚为什么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
也不会返回任何内容。
答案 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编码)。