Подтвердить что ты не робот

Попытка разобрать `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 после установки этой переменной также не возвращает ничего.

4b9b3361

Ответ 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).