我想了解Flask的工作原理。 我在本地计算机上运行了此脚本:
@app.route('/ordini', methods=['GET', 'POST'])
def ordini():
global data_start, ora_start, data_stop, id, M1, M2, M3, M4, M5
if request.method == 'POST':
id = request.form['id']
data_start = request.form['data_start']
ora_start = request.form['ora_start']
data_stop = request.form['data_stop']
M1 = request.form['M1']
M2 = request.form['M2']
M3 = request.form['M3']
M4 = request.form['M4']
M5 = request.form['M5']
return render_template('ordine_macchine_necessarie.html',
id=id, data_start=data_start,
data_stop=data_stop,
ora_start=ora_start,
M1=M1, M2=M2, M3=M3, M4=M4, M5=M5)
return render_template('ordine.html')
一切正常,我从ordine.html
获取了值,然后将它们传递给ordine_macchine_necessarie.html
,但我认为我没有以正确的方式传递值。
我是否真的必须像id = request.form['id']
那样设置所有变量,然后像id=id
那样传递所有变量?
我可以想象由50个或更多值组成的表单,我敢肯定我做的事情不正确。
如果我开始学习Django instad Flask,也许会更好?一些用户说这更好!
答案 0 :(得分:1)
如果只需要特定的文件,则可以这样做:
request_data = {
'id': request.form['id'],
'data_start': request.form['data_start'],
'ora_start': request.form['ora_start'],
'data_stop': request.form['data_stop'],
'M1': request.form['M1'],
'M2': request.form['M2'],
'M3': request.form['M3'],
'M4': request.form['M4'],
'M5': request.form['M5'],
}
# or dicitionary comprehension
# relevant_keys = ['id','data_start','ora_start','data_stop', 'M1', 'M2', 'M3', 'M4', 'M5']
# requst_data = {key: request.form[key] for key in relevant_keys}
return render_template('ordine_macchine_necessarie.html', **request_data)
如果要从表单中获取所有数据,请执行以下操作:
return render_template('ordine_macchine_necessarie.html', **request.form)
从Flask / Tornado / aiohttp / Falcon开始,他们都很了解,在进入Django之前,值得至少与他们一起编写一些小项目。
答案 1 :(得分:0)
如果您希望从表单和值中获取所有关键字,我认为您可以使用:
do_something(**request.form
)
编辑:您当前的代码将像这样修改:
@app.route('/ordini', methods=['GET', 'POST'])
def ordini():
if request.method == 'POST':
return render_template('ordine_macchine_necessarie.html',**request.form)
return render_template('ordine.html')
文档说request.form
是ImmutableMultiDict
。
默认情况下,此函数返回ImmutableMultiDict。可以通过将parameter_storage_class设置为其他类型来进行更改。如果表单数据的顺序很重要,则可能有必要。 http://flask.pocoo.org/docs/1.0/api/#flask.Request.form
如果您查看MultiDict
文档,就会发现可以使用任何词典方法。我猜您可以使用kwargs语法。
MultiDict是一个字典子类,该子类经过自定义以处理同一个键的多个值,例如包装程序中的解析函数会使用该值。这是必要的,因为某些HTML表单元素会为同一键传递多个值。
MultiDict实现所有标准词典方法。在内部,它将键的所有值保存为列表,但是标准dict访问方法将仅返回键的第一个值。如果您也想访问其他值,则必须使用如下所述的列表方法 http://werkzeug.pocoo.org/docs/0.14/datastructures/#werkzeug.datastructures.MultiDict