2013-07-19 10 views
11

Ho guardato attraverso la documentazione, ma per la vita di me, non riesco a capire come l'oggetto request.form nel pallone viene popolato. The documentation dice che è pieno di dati del modulo analizzati da richieste POST o PUT, ma il mio modulo è dinamico, quindi non so necessariamente quali campi esistano quando viene inviata la richiesta POST, anche se voglio assicurarmi di aggiungere le informazioni da questi campi al database.campi di modulo dinamici nel flask.request.form

Alcuni dei campi nel modulo sono sempre lì, ma ci sarà anche un numero qualsiasi di campi aggiuntivi da un elenco di circa 60. Come dovrei andare a capire quali di questi campi aggiuntivi sono nella richiesta e come dovrei ottenere i dati da loro?

EDIT: Il mio problema specifico è stato risolto, ma è ancora la pena di chiedere come il dizionario Request.Form è popolato. Ho scoperto che se un input di casella di controllo non è selezionato, non c'è nessuna chiave aggiunta al dizionario sotto il suo nome e provare a ottenere il valore di una chiave che non esiste dal dizionario risulta in un modo piuttosto confuso e criptico HTTP 400 BAD REQUEST errore.

+0

I valori visualizzati in request.form dipendono dai dati inviati dal browser. La decisione di non inviare una chiave quando una casella è deselezionata viene presa dal browser, non da Flask. –

+0

Penso che sia meglio se apri nuove domande per le nuove domande che hai. –

risposta

19

request.form restituisce un oggetto MultiDict. Fondamentalmente, significa che per 1 chiave, potresti avere più valori. Se si desidera verificare che cosa il vostro modulo POST assomiglia, basta fare una dichiarazione stampa rapida come segue

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

Se si legge la documentazione per MultiDict, si dice

"Un MultiDict è una sottoclasse dizionario personalizzato per trattare con più valori per la stessa chiave che è per esempio usato dalle funzioni di analisi nei involucri. Questo è necessario perché alcuni elementi del modulo HTML passano più valori per la stessa chiave. "

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

+0

Mi piacerebbe dire (contribuire) che, a prima vista, è un po 'difficile capire come il 'request.form' viene analizzato come un normale dizionario Python (anche se restituisce una sorta di' dict' con 'tuple' se provi a stampare' f'), ma la risposta ha molto senso, specialmente per quanto riguarda l'esempio e anche la definizione di Flask MultiDict. Grazie mille, #codegeek :). – ivanleoncz

Problemi correlati