如何使用 request.form.get 从表单中获取多个元素

Car*_*eno 6 html python request.form flask

我在 html 文件中有一个表单,该表单正在创建新的输入字段,用户应该在其中输入一些信息。后来,我想将所有这些值传递到我的 python 主文件(application.py)中并用它们做一些事情。问题是我不知道如何将多个值传递到 python 中。通常我会用这个

request.form.get("用户名")

它返回我的 html 文件中名为“username”的输入字段的值。现在,我有几个输入字段,当用户按下按钮时生成:

$("#add_dream").click(function(){
    $("#"+x).append('<button type="submit" style="height:30px;" class="delete" 
    id="ix">Remove</button>')
    document.getElementById("ix").setAttribute("id","delbuttdream"+j)
}
Run Code Online (Sandbox Code Playgroud)

这不是完整的代码,但它可能有助于理解我在说什么。用户可以根据需要多次创建和删除此新字段,因此字段的名称或其 ID 不遵循直接顺序(1、2、3、4...)。我想知道是否可以使用 request.form.get 同一类或具有特定 id 的所有元素从 python 调用,而不仅仅是其中一个的名称

fur*_*ras 6

表格示例:

Items in random order</br>
<form method="POST">
<input name="item4" value="val4"/></br>
<input name="item2" value="val2"/></br>
<input name="item1" value="val1"/></br>
<input name="item3" value="val3"/></br>
<button type="submit">OK</button>
</form>
Run Code Online (Sandbox Code Playgroud)

request.form行为类似于字典,您可以使用它request.form.items()来获取所有键和值并过滤它们。

for key, val in request.form.items():
    #print(key,val)
    if key.startswith("item"):
        print(key, val)
Run Code Online (Sandbox Code Playgroud)

或者request.form.keys()只获取键来过滤和排序它们。

keys = request.form.keys()
keys = [key for key in keys if key.startswith("item")]
keys = sorted(keys)

for key in keys:
    #print(key, request.form[key])
    print(key, request.form.get(key))
Run Code Online (Sandbox Code Playgroud)

最少的工作代码:

from flask import Flask, request, render_template_string

app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def index():
    if request.method == 'POST':

        print('--- original order ---')

        for key, val in request.form.items():
            if key.startswith("item"):
                print(key, val)

        print('--- sorted ---')

        keys = request.form.keys()
        keys = [key for key in keys if key.startswith("item")]
        keys = sorted(keys)

        for key in keys:
            #print(key, request.form[key])
            print(key, request.form.get(key))

    return render_template_string('''Items in random order</br>
<form method="POST">
<input name="item4" value="val4"/></br>
<input name="item2" value="val2"/></br>
<input name="item1" value="val1"/></br>
<input name="item3" value="val3"/></br>
<button type="submit">OK</button>
</form>
''')

if __name__ == '__main__':
    app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)