Попытка разобрать `request.body` из POST в Django
По какой-то причине я не могу понять, почему Django неправильно обрабатывает содержимое request.body
.
Он отправляется в формате JSON
, и просмотр вкладки Network
в Dev Tools показывает это как полезную нагрузку запроса:
{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
В Python 3.0 до Python 3.5.x, json.loads()
будет принимать только строку юникода, поэтому вы должны декодировать request.body
(которая является байтовой строкой) перед передачей ее в json.loads()
.
body_unicode = request.body.decode('utf-8')
body = json.loads(body_unicode)
content = body['content']
В Python 3.6, json.loads()
принимает байты или байты. Поэтому вам не нужно декодировать request.body
(предполагая, что он закодирован в UTF-8, UTF-16 или UTF-32).