用Flask从2个文件html传递多个变量的最简单方法

时间:2018-08-05 21:33:37

标签: python variables post flask

我想了解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,也许会更好?一些用户说这更好!

2 个答案:

答案 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.formImmutableMultiDict

  

默认情况下,此函数返回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