web-dev-qa-db-ja.com

フラスコ.request.formの動的フォームフィールド

ドキュメントを確認しましたが、私の人生では、Flaskのrequest.formオブジェクトがどのように設定されているかを理解できません。 ドキュメント はPOSTまたはPUTリクエストからの解析済みフォームデータで埋められていると言っていますが、私のフォームは動的であるため、POSTリクエストが送信されます-これらのフィールドの情報をデータベースに確実に追加したいのですが。

フォーム内の一部のフィールドは常に存在しますが、約60のリストから任意の数の追加フィールドもあります。これらの追加フィールドのどれがリクエストに含まれているかを把握するにはどうすればよいですか。それらからのデータ?

編集:私の特定の問題は解決されましたが、request.form辞書がどのように入力されているかを尋ねる価値はあります。チェックボックスの入力がオフの場合、その名前で辞書にキーが追加されないという難しい方法を見つけました。辞書から存在しないキーの値を取得しようとすると、かなり混乱し、不可解なHTTP 400 BAD REQUESTになります。エラー。

17
Chase Sandmann

request.formMultiDictオブジェクトを返します。基本的に、これは1つのキーに対して複数の値を持つことができることを意味します。フォームPOSTがどのように見えるかをテストしたい場合は、次のように簡単なprintステートメントを実行してください。

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

MultiDictのドキュメントを読むと、

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

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

31
codegeek