forms - Flask:如何存储用户的表单输入,以便以后可以在两个请求中检索它
问题描述
我正在使用 Flask 开发物流网站。
在路线/step1
上,用户填写一份详细说明n 个地块及其属性的表格。
提交表单并发送 POST 请求,/step2
其中包含以下数据:
*重量1,长度1,宽度1,高度1,
重量2,长度2 ...
...
...
*重量n,长度,宽度,高度,
在/step2
用户中填写发件人和收件人地址。
此表单作为 POST 请求提交给/process-order
这是问题所在:
我的视图如何process_order
检索/step1
和/step2
我可以想到三种解决方案 - 下面列出了 - 但我只知道如何处理第一个。
- 将 step1 表单中提交的数据存储在隐藏的输入中,并将其发送到表单中
step2.html
,然后从发送到的请求中检索此数据process_order
并将它们存储为数组。 - 缓存
- 烧瓶.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
我的模板中的表单属性调用的(此处不包括)。
解决方案
此外,您可以将步骤之间的输入作为参数传递,如下所示
@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'
以此类推,将所有参数发送到下一个
推荐阅读
- ruby-on-rails - RSpec 要求我在测试通过之前打印对象
- jsonschema - 验证数组 json 包含几个使用 json 模式的无序对象
- c# - 正则表达式
- lua - 创建混合和最大功能
- r - 如何通过单击 timevis 图表中的项目来创建弹出窗口?
- javascript - 输入字段中的响应文本
- node.js - 护照js,身份验证失败,http 500。没有响应
- c# - Microsoft.Office.Word.Interop 2nd Document 一直以只读方式打开
- amazon-web-services - 如何在 API 网关中传递路径参数来调用 lambda 函数?
- groovy - JMeter:@ 表示法(用于 xml)