Parler du transfert des paramètres de tableau vers le QueryDict de django

J'écris un programme qui transfère les paramètres reçus par le service Django B de ʻA vers un autre service C` tels quels sans aucune modification.

Dans un modèle, si le paramètre était un tableau, il y avait un bogue où seul le dernier élément était transféré au service C, pas le tableau entier.

Source avant modification:

>>> qd = QueryDict('egg=1&egg=2&p=3')
>>> response = requests.get('http://localhost:12345/', params=qd)

L'URL de facturation pour le service C est maintenant /? P = 3 \ u0026egg = 2.

Après examen, il y a une grande différence entre Query Dict et Python dict. Si «QueryDict» est passé tel quel en tant que «dict», tous les paramètres auront une valeur. Il semble que la méthode QueryDict.get () soit utilisée à l'intérieur.

>>> qd.get('egg')
u'2'
>>> qd.getlist('egg')
[u'1', u'2']

QueryDict a une méthode dict (), mais elle s'est comportée différemment que prévu.

>>> qd.dict()
{u'p': u'3', u'egg': u'2'}

Enfin, j'ai trouvé cette méthode.

>>> dict(qd.iterlists())
{u'p': [u'3'], u'egg': [u'1', u'2']}

Le programme modifié ressemble à ceci:

>>> response = requests.get('http://localhost:12345/', params=dict(qd.iterlists()))

Cette fois, le service C a été correctement transféré en tant que /? P = 3 \ u0026egg = 1 \ u0026egg = 2, et ʻegg` a été transféré sous la forme d'un tableau.

Recommended Posts

Parler du transfert des paramètres de tableau vers le QueryDict de django
Mémorandum sur le QueryDict de Django
À propos du ProxyModel de Django