Когда я устанавливаю значение скрытых полей в компоненте представления и отправляю форму, переменная POST на другом конце возвращает два экземпляра каждой переменной, где первый является пустым, а второй содержит ожидаемые данные. Кажется, я не могу получить или извлечь данные из переменной POST (тип ImmutableMultiDict). Если я приведу POST к диктату, я потеряю вторые переменные, включая данные. Также, если я пытаюсь перебрать переменную POST и создать словарь, вторая переменная не копируется. Поэтому я не могу получить данные POST, даже если приму эту двуличность.
Я использую Flask и WTForms в традиционной MVC архитектуре.
forms.py:
class TestForm(FlaskForm):
the_int = HiddenField()
the_string = HiddenField()
the_list = HiddenField()
the_dict = HiddenField()
submit = SubmitField('Submit')
rout.py:
@app.route('/test')
def test():
an_int = 1
a_string = "ABC"
a_list = ['One', 'Two']
a_dict = {'First': 'A', 'Second': 'B'}
form = TestForm()
return render_template('test.html', an_int = an_int,
a_string = a_string,
a_list = a_list,
a_dict = a_dict,
form = form)
@app.route('/testresult', methods=['GET', 'POST'])
def testresult():
if request.method == "POST":
formdata = request.form
dictdata = dict(request.form)
builtdata = {}
for k, v in request.form.items():
builtdata.update({k: v})
return render_template('testresult.html', formdata = formdata,
dictdata = dictdata,
builtdata = builtdata)
return render_template('test')
test. html:
<h1>Test</h1>
<br>
<form action="testresult" method="POST">
{{ form.hidden_tag() }}
{{ form.the_int(value=an_int) }}
{{ form.the_string(value=a_string) }}
{{ form.the_list(value=a_list) }}
{{ form.the_dict(value=a_dict) }}
{{ form.submit() }}
</form>
результат теста. html:
<h1>Result</h1>
<p>{{ formdata }}</p>
<p>{{ dictdata }}</p>
<p>{{ builtdata }}</p>
Результат в результате теста. html:
Result
ImmutableMultiDict([('the_int', ''), ('the_int', '1'), ('the_string', ''), ('the_string', 'ABC'), ('the_list', ''), ('the_list', "['One', 'Two']"), ('the_dict', ''), ('the_dict', "{'First': 'A', 'Second': 'B'}"), ('csrf_token', 'IjN---kWw'), ('submit', 'Submit')])
{'the_int': '', 'the_string': '', 'the_list': '', 'the_dict': '', 'csrf_token': 'IjN---kWw', 'submit': 'Submit'}
{'the_int': '', 'the_string': '', 'the_list': '', 'the_dict': '', 'csrf_token': 'IjN---kWw', 'submit': 'Submit'}