Pour une raison quelconque, je ne peux pas comprendre pourquoi Django ne gère pas correctement mon contenu request.body
.
Il est envoyé au format JSON
, et en regardant l'onglet Network
dans les outils de développement, affiche ceci comme charge de la requête:
{creator: "creatorname", content: "postcontent", date: "04/21/2015"}
c'est exactement ce que je veux qu'il soit envoyé à mon API.
Dans Django j'ai une vue qui accepte cette demande en tant que paramètre et, à mes seules fins de test, je devrais imprimer request.body["content"]
Sur la console.
Bien sûr, rien n’est imprimé, mais quand j’imprime request.body
, J’obtiens ceci:
b'{"creator":"creatorname","content":"postcontent","date":"04/21/2015"}'
donc je sais que j'ai do avoir un corps envoyé.
J'ai essayé d'utiliser json = json.loads(request.body)
en vain. Imprimer json
après avoir défini cette variable ne renvoie également rien.
Dans Python 3.0 à Python 3.5.x, json.loads()
] n'accepte qu'une chaîne de caractères unicode. Vous devez donc décoder request.body
(qui est une chaîne d'octets) avant de la transmettre à json.loads()
.
body_unicode = request.body.decode('utf-8')
body = json.loads(body_unicode)
content = body['content']
Dans Python 3.6, json.loads()
accepte les octets ou bytearrays) . Par conséquent, vous ne devriez pas avoir besoin de décoder request.body
(En supposant qu'il soit codé UTF-8, UTF-16 ou UTF-32).