J'ai un problème très similaire à Django's QueryDict Bizarre Comportement: Bouquets Publier le dictionnaire en une seule clé et Test de l'unité Django JSON View . Cependant, aucune des questions / réponses de ces threads ne pointe vraiment au problème de la spécification que j'ai. J'essaie d'utiliser le client de test de Django pour envoyer une demande avec un objet JSON imbriqué (ce que j'ai bien que je travaille avec des objets JSON avec des valeurs non-JSON).
tentative # 1: Voici mon Code initial: p> Comme vous pouvez le constater, j'ai un objet JSON imbriqué dans mes données de demande. Cependant, c'est ce que la demande.post ressemble à: p> tentative # 2: strong> J'ai essayé, ajoutant sur le paramètre de type de contenu comme suit : p> et ce que je reçois maintenant pour demande.post est p> Tout ce que je veux faire, c'est pouvoir Spécifiez un dict imbriqué pour mes données de demande. Y a-t-il un moyen facile de faire cela? P> p>
3 Réponses :
Votre problème indique que Django interpréte votre demande sous forme Une autre chose à regarder est que Python représente les clichées / valeurs de dictionnaire utilisant des guillemets simples lorsque des chaînes sont rendantes comme des cordes, que l'analyseur Simplejson n'aime pas. Gardez vos objets JSON codés dur comme chaînes à cote unique, en utilisant des guillemets doubles à l'intérieur pour vous déplacer sur cette ... P> multipart / formulaire code> plutôt que application / json code>. Essayez p>
c.post ("URL", "{JSON_Content}", content_type = "Application / JSON") code>. P>
Les œuvres suivantes pour moi (à l'aide de Named Args):
geojson = {
"type": "Point",
"coordinates": [1, 2]
}
response = self.client.post('/validate', data=json.dumps(geojson),
content_type='application/json')
Json.dumps est la meilleure façon de le faire. Cela devrait être la réponse acceptée.
Mais cela ne fonctionne pas avec des données de formulaire multipart, avec dict imbriqué.
Ma solution est la suivante:
dans la méthode de test: p> dans la vue: p> json.loads(request.POST['data'])