2013-07-19 39 views
11

ドキュメントを見てきましたが、私の人生の間、Flaskのrequest.formオブジェクトがどのように埋め込まれているのかわかりません。 The documentationは、POSTリクエストやPUTリクエストの解析されたフォームデータでいっぱいですが、私のフォームは動的なので、POSTリクエストが送信されたときにどのフィールドが存在するのか必ずしも分かりません。データベースに転送します。flask.request.formの動的フォームフィールド

フォーム内のいくつかのフィールドは常に存在しますが、リストには約60の余分なフィールドもあります。これらの追加フィールドのどれがリクエストに含まれているか私はそれらからデータを取得する必要がありますか?

EDIT:私の具体的な問題は解決されましたが、request.formディクショナリがどのように設定されているかを依頼する価値はあります。チェックボックスの入力がチェックされていないと、その名前の下に辞書にキーが追加されておらず、辞書の中に存在しないキーの値を取得しようとすると、ちょっと混乱してわかりにくくなるという難しい方法が見つかったHTTP 400 BAD REQUESTエラー。

+0

request.formに表示される値は、ブラウザが送信するデータによって異なります。チェックボックスがチェックされていないときにキーを送信しないという決定は、Flaskではなくブラウザによって行われます。 –

+0

あなたが持っている新しい質問に新しい質問をするのが一番良いと思います。 –

答えて

19

request.formは、MultiDictオブジェクトを返します。基本的には、1つのキーに対して複数の値を持つことができます。あなたは、フォームのPOSTがどのように見えるかをテストしたい場合は、MultiDictのマニュアルを読めば

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

を次のように、単に迅速なprint文を行い、それが

を言う「MultiDictはにカスタマイズされた辞書のサブクラスでありますラッパーに解析関数によって使用される、例えばある同じキーに対する複数の値を扱う。をいくつかのHTMLフォーム要素は同じキーに複数の値を渡すため、これが必要である。

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

+0

最初の一見で 'request.form'が通常のPython辞書のようにどのように解析されているのかを理解するのはちょっと難しいと言います(貢献しています) '' f'を印刷しようとすると 'タプル ')が返されますが、その答えはFlask MultiDictの例と定義に関して特に意味があります。ありがとう、#codegeek :) – ivanleoncz

関連する問題