2013-07-19 31 views
11

Przeanalizowałem dokumentację, ale nie wiem, jak wygląda obiektw Kolbie. The documentation mówi, że jest wypełniony analizowanymi danymi formularza z żądań POST lub PUT, ale mój formularz jest dynamiczny, więc nie wiem, jakie pola istnieją podczas wysyłania żądania POST - chociaż chcę się upewnić, że dodaję informacje z tych pól do bazy danych.Dynamiczne pola formularzy w flask.request.form

Niektóre pola w formularzu są zawsze dostępne, ale pojawi się także dowolna liczba dodatkowych pól z listy około 60. W jaki sposób mam się zastanowić, które z tych dodatkowych pól są w żądaniu i w jaki sposób czy powinienem otrzymać od nich dane?

EDYCJA: Mój konkretny problem został rozwiązany, ale wciąż warto zapytać, jak wypełnia się słownik request.form. Dowiedziałem się, że jeśli zaznaczenie pola wyboru nie jest zaznaczone, nie ma klucza dodanego do słownika pod jego nazwą, a próba znalezienia wartości klucza, który nie istnieje ze słownika, prowadzi do dość mylącego i tajemniczego HTTP 400 BAD REQUEST błąd.

+0

Wartości wyświetlane w request.form zależą od danych wysyłanych przez przeglądarkę. Decyzja o nie wysyłaniu klucza po odznaczeniu pola wyboru jest podejmowana przez przeglądarkę, a nie przez Flask. –

+0

Myślę, że najlepiej będzie, jeśli otworzysz nowe pytania dotyczące nowych pytań, które masz. –

Odpowiedz

19

request.form zwraca obiekt MultiDict. Zasadniczo oznacza to, że dla 1 klucza można mieć wiele wartości. Jeśli chcesz sprawdzić, co Twój formularz POST wygląda, po prostu zrobić szybkie instrukcji print następująco

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

Jeśli czytać dokumentację MultiDict, mówi

„To MultiDict jest podklasą słowniku dostosowane do czynienia z wielu wartości dla tego samego klucza, który jest na przykład używane przez funkcje analizowania w owijarki. jest to konieczne, ponieważ niektóre elementy formularza HTML przekazać wiele wartości dla tego samego klucza. "

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

+0

Chciałbym powiedzieć (przyczynić się), że na pierwszy rzut oka trochę trudniej jest zrozumieć, w jaki sposób 'request.form' jest parsowany tak, jak zwykły słownik Pythona (chociaż zwraca coś w rodzaju' dict' z 'krotki', jeśli spróbujesz wydrukować' f'), ale odpowiedź ma wiele sensu, szczególnie w odniesieniu do przykładu, a także definicji Flask MultiDict. Wielkie dzięki, #codegeek :). – ivanleoncz