[PYTHON] Apropos Übertragung von Array-Parametern an QueryDict von django

Ich schreibe ein Programm, das die vom Django-Dienst "B" empfangenen Parameter von "A" auf einen anderen Dienst "C" überträgt, da sie unverändert sind.

Wenn der Parameter in einem Muster ein Array war, gab es einen Fehler, bei dem nur das letzte Element an Dienst C übertragen wurde, nicht das gesamte Array.

Quelle vor Änderung:

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

Die Abrechnungs-URL für den Dienst "C" lautet jetzt "/? P = 3 \ u0026egg = 2".

Bei der Prüfung gibt es einen großen Unterschied zwischen "Query Dict" und Python "Dict". Wenn "QueryDict" unverändert als "dict" übergeben wird, sind alle Parameter ein Wert. Es scheint, dass die Methode "QueryDict.get ()" im Inneren verwendet wird.

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

QueryDict hat eine dict () -Methode, die sich jedoch anders als erwartet verhalten hat.

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

Schließlich fand ich diese Methode.

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

Das geänderte Programm sieht folgendermaßen aus:

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

Diesmal wurde der Dienst "C" korrekt in Form eines Arrays übertragen, wie "/? P = 3 \ u0026egg = 1 \ u0026egg = 2".

Recommended Posts

Apropos Übertragung von Array-Parametern an QueryDict von django
Memorandum zu Djangos QueryDict
Über Djangos ProxyModel