首页 > 解决方案 > Flask:如何存储用户的表单输入,以便以后可以在两个请求中检索它

问题描述

我正在使用 Flask 开发物流网站。

在路线/step1上,用户填写一份详细说明n 个地块及其属性的表格。

提交表单并发送 POST 请求,/step2其中包含以下数据:

*重量1,长度1,宽度1,高度1,

重量2,长度2 ...

...

...

*重量n,长度,宽度,高度,

/step2用户中填写发件人和收件人地址。

此表单作为 POST 请求提交给/process-order

这是问题所在:

我的视图如何process_order检索/step1/step2

我可以想到三种解决方案 - 下面列出了 - 但我只知道如何处理第一个。

  1. 将 step1 表单中提交的数据存储在隐藏的输入中,并将其发送到表单中step2.html,然后从发送到的请求中检索此数据process_order并将它们存储为数组。
  2. 缓存
  3. 烧瓶.g

注意这是我的第一个 Flask 项目,我对缓存的经验为零。所以请为我把事情搞砸。

更新

这是我的实际代码:

@main.route('/order', methods=['POST'])
def order():

    # this function is invoked when user submits a form from the home page

    country_from = request.form['country_from']
    country_to = request.form['country_to']

    data = request.form

    parcels = []

    for i in range(1, int(data['parcel_count']) + 1):

        parcel = Parcel(
            weight=data['weight{}'.format(i)],
            length=data['length{}'.format(i)],
            width=data['width{}'.format(i)],
            height=data['height{}'.format(i)],
        )

        parcels.append(parcel)


    weight_units = data['units']
    if weight_units == 'kg':
        distance_units = 'cm'
    else:
        distance_units = '"'


    return render_template('order.html', 
                            countries = COUNTRIES,
                            country_from = country_from,
                            country_to = country_to,
                            parcels = parcels,
                            weight_units = weight_units,
                            distance_units = distance_units,
    )


@main.route('/process-order', methods=['POST'])
def process_order():

    data = request.form

    parcels = []

    # pending
    # how can I retrieve the parcels array again?

请注意,我的视图函数是从action我的模板中的表单属性调用的(此处不包括)。

标签: formsflaskcaching

解决方案


此外,您可以将步骤之间的输入作为参数传递,如下所示

@app.route('/step1', methods=['GET', 'POST'])
def step1():
    parcels=[(11,12,13,14),(21,22,23,24),(31,32,33,34)] # contain list of  weights, lengths, widths, heights,
    weight_units ='kg' # another data to pass
    return redirect(url_for('step2',x=parcels,y=weight_units ))

@app.route('/step2/<x>/<y>', methods=['GET', 'POST'])
def step2(x,y):
    print(x) # console output
    print(y)
    return 'ok'

以此类推,将所有参数发送到下一个


推荐阅读