Frage

Verwenden von WebApp2 Ich erstelle Unit -Tests für ein Formular, in dem Kontrollkästchen für Stimmen vorhanden sind, sodass mehrere Werte für die veröffentlicht werden können vote Feld und sie werden durch abgerufen request.POST.getall('vote'):

<input type="checkbox" name="vote" value="Better">
<input type="checkbox" name="vote" value="Faster">
<input type="checkbox" name="vote" value="Stronger">

Im Unit -Test habe ich versucht, eine Liste zu bestehen:

response = app.get_response('/vote',
  POST={'vote': [u'Better', u'Faster', u'Stronger']},
  headers=[('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8')]
)

Aber sieht es so aus, als würde es einfach in eine Zeichenfolge konvertiert:

votes = self.request.POST.getall('vote')
# => [u"[u'Better', u'Faster', u'Stronger']"]

Wie kann ich mehrere Werte für übergeben vote das wird als Liste über über die via abgerufen request.POST.getall()?

War es hilfreich?

Lösung

Postdaten werden mit der Abfrage -Zeichenfolge codiert, und mehrere Elemente mit demselben Namen werden durch Wiederholung des Schlüssels mit unterschiedlichen Werten dargestellt. Zum Beispiel:

vote=Better&vote=Faster&vote=Stronger

Python hat Bibliotheksfunktionen, um dies für Sie zu tun:

urllib.urlencode({
  'vote': ['Better', 'Faster', 'Stronger'],
}, True)

Das zweite Argument (True) zu urlencode wird als "doseq" bezeichnet und anweist Urlencode, Sequenzen als Listen separater Elemente zu codieren.

Andere Tipps

Die WebTest -Bibliothek ist für diese Testfälle hilfreich.

http://webbtest.pythonpaste.org/en/latest/index.html#form-submissions

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top