8
votes

Django Test Client Squishes JSON imbriquée

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: xxx

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 à: xxx

tentative # 2: J'ai essayé, ajoutant sur le paramètre de type de contenu comme suit : xxx

et ce que je reçois maintenant pour demande.post est xxx

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?


0 commentaires

3 Réponses :


6
votes

Votre problème indique que Django interpréte votre demande sous forme multipart / formulaire plutôt que application / json . Essayez

c.post ("URL", "{JSON_Content}", content_type = "Application / JSON") .

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 ...


0 commentaires

21
votes

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')


2 commentaires

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é.



0
votes

Ma solution est la suivante:

dans la méthode de test: p> xxx pré>

dans la vue: p>

json.loads(request.POST['data'])


0 commentaires