Как получить несколько элементов из формы, используя request.form.get - PullRequest
3 голосов
/ 30 сентября 2019

У меня есть форма внутри HTML-файла, эта форма создает новые поля ввода, в которые пользователь должен ввести некоторую информацию. Позже я хочу передать все эти значения в мой основной файл python (application.py) и кое-что с ними сделать. Проблема в том, что я не знаю, как передать несколько значений в Python. Обычно я бы использовал этот

request.form.get ("username")

, который возвращает мне значение поля ввода с именем "username" внутри моего html-файла. Теперь у меня есть несколько полей ввода, которые генерируются, когда пользователь нажимает кнопку:

$("#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)
}

Это не весь код, но это может помочь понять, что я говорю. Эти новые поля могут создаваться и удаляться столько раз, сколько пользователь хочет, поэтому имена полей или их идентификаторы не следуют в прямом порядке (1,2,3,4 ...). Я хочу знать, в любом случае, если я могу позвонить из Python, используя request.form.get все элементы одного и того же предложения или с определенным идентификатором, а не только один из них по имени

1 Ответ

1 голос
/ 30 сентября 2019

Пример формы:

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>

request.form ведет себя как словарь, и вы можете использовать request.form.items(), чтобы получить все ключи и значения и отфильтровать их.

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

или 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))

Минимальный рабочий код:

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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...