Trying to parse `request.body` from POST in Django [duplicate]
For some reason I cannot figure out why Django isn't handling my request.body
content correctly.
It is being sent in JSON
format, and looking at the Network
tab in Dev Tools shows this as the request payload:
{creator: "creatorname", content: "postcontent", date: "04/21/2015"}
which is exactly how I want it to be sent to my API.
In Django I have a view that accepts this request as a parameter and just for my testing purposes, should print request.body["content"]
to the console.
Of course, nothing is being printed out, but when I print request.body
I get this:
b'{"creator":"creatorname","content":"postcontent","date":"04/21/2015"}'
so I know that I do have a body being sent.
I've tried using json = json.loads(request.body)
to no avail either. Printing json
after setting that variable also returns nothing.
Solution 1:
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).