2013-07-19 10 views
11

Ich habe die Dokumentation durchgesehen, aber für das Leben von mir kann ich nicht herausfinden, wie das request.form Objekt in Flask belegt ist. The documentation sagt, dass es mit geparsten Formulardaten von POST- oder PUT-Anfragen gefüllt ist, aber mein Formular ist dynamisch, daher weiß ich nicht unbedingt, welche Felder beim Senden der POST-Anfrage existieren - obwohl ich sicherstellen möchte, dass ich die Informationen aus diesen Feldern hinzufüge zur Datenbank.Dynamische Formularfelder in flask.request.form

Einige der Felder im Formular sind immer vorhanden, aber es wird auch eine beliebige Anzahl zusätzlicher Felder aus einer Liste von etwa 60 geben. Wie soll ich herausfinden, welche dieser zusätzlichen Felder in der Anfrage enthalten sind und wie Soll ich die Daten von ihnen bekommen?

EDIT: Mein spezifisches Problem wurde gelöst, aber es lohnt sich immer noch zu fragen, wie das request.form Wörterbuch gefüllt ist. Ich fand heraus, dass, wenn eine Checkbox-Eingabe deaktiviert ist, kein Schlüssel zu dem Wörterbuch unter seinem Namen hinzugefügt wird und der Versuch, den Wert eines Schlüssels zu erhalten, der nicht aus dem Wörterbuch existiert, führt zu einer ziemlich verwirrenden und kryptischen HTTP 400 BAD REQUEST Error.

+0

Welche Werte in request.form erscheinen, hängt davon ab, welche Daten der Browser sendet. Die Entscheidung, einen Schlüssel nicht zu senden, wenn ein Kontrollkästchen deaktiviert ist, wird vom Browser getroffen, nicht von Flask. –

+0

Ich denke, es ist am besten, wenn Sie neue Fragen für die neuen Fragen öffnen, die Sie haben. –

Antwort

19

request.form gibt ein Objekt MultiDict zurück. Grundsätzlich bedeutet das, dass Sie für 1 Schlüssel mehrere Werte haben könnten. Wenn Sie testen wollen, was Ihre Form POST aussieht, nur eine schnelle print-Anweisung tun als

f = request.form 
for key in f.keys(): 
    for value in f.getlist(key): 
     print key,":",value 

folgt Wenn Sie die Dokumentation für MultiDict lesen, heißt es

„A MultiDict ist eine maßgeschneiderte Wörterbuch Unterklasse befassen sich mit mehreren Werten für den gleichen Schlüssel, die zum Beispiel durch die Analyse-Funktionen in dem Wrapper verwendet wird. Dies ist notwendig, da einige HTML-Formularelemente mehr Werte für den gleichen Schlüssel übergeben. "

http://werkzeug.pocoo.org/docs/datastructures/#werkzeug.datastructures.MultiDict

+0

Ich möchte sagen (beitragen), dass es auf den ersten Blick ein wenig schwierig zu verstehen ist, wie die 'request.form' genau wie ein normales Python-Wörterbuch geparst wird (obwohl sie eine Art' dict' mit zurückgibt) 'Tupel', wenn Sie versuchen,' f' zu drucken, aber die Antwort macht sehr viel Sinn, besonders in Bezug auf das Beispiel und die Definition von Flask MultiDict. Vielen Dank, #codegeek :). – ivanleoncz

Verwandte Themen