我创建了一个Flask应用程序,在本地计算机上一切正常,我可以从HTML页面上的表单插入数据,然后将数据传递给程序以进行详细说明。
我想在Ubuntu服务器上移动此应用程序,我使用此guide设置了所有东西,例如nginx,python,flask,uswgi。 Web服务器可以工作,我可以访问网页并插入所有数据,但是当程序将数据传递到另一个页面时,排序不正确,则第三个字段位于第二个位置,依此类推。
我不明白为什么这在我的本地计算机上没有发生。
这里是一个例子:
ImmutableMultiDict
([('group-0[1][macchine]', 'M02'), ('group-0[1][tempo_previsto_setup]', '17'), ('group-0[0][tempo_previsto_setup]', '13'),
('group-0[0][macchine]', 'M01'), ('group-0[0][tempo_previsto_lavorazione]'
('group-0[2][macchine]', 'M03'), ('group-0[2][tempo_previsto_lavorazione]', '22'), ('group-0[0][tipo_lavorazione]', '')
这只是几个字段,但是列表要长得多,如您所见,M01
位于第二位置,而在网页中则位于第一字段。
基本上每个group-0[1][macchine]
应该有他的group-0[1][tempo_previsto_setup]'
,'group-0[0][tempo_previsto_lavorazione]'
但正如您所见,M02
有两个'group-0[0][tempo_previsto_lavorazione]
(一个是正确的)和一个[1]
,一个是[0]
拥有的M01
这引起了很多问题,因为编写该程序是为了使数据正确排序
nginx可能有什么问题?
我得到的ImmutableMultiDict
如下:
@app.route('/ordini/conferma', methods=['GET', 'POST'])
def conferma_ordine():
global data
if request.method == 'POST':
data = request.form
print(data)
Calcolo_tempistiche.ottenimento_variabili(data)
array_ordine = Calcolo_tempistiche.array_ordine
return render_template('ordine_eseguito.html', **locals())
data = []
答案 0 :(得分:1)
nginx没有任何问题。基本上,您使用的是ImmutableMultiDict
,并且不维护此类数据类型的顺序。如果您想要特定顺序的数据,则应使用ImmutableOrderedMultiDict
存储数据并作为响应发送。
更新:
免责声明:我不太熟悉烧瓶,而我的解决方案将是hack,我建议您在未经非常了解烧瓶的人进行验证的情况下,不建议将其用于生产中。
根据您编写的将ImmutableMultiDict
格式更改为ImmutableOrderedMultiDict
的代码。首先,您需要将其转换为普通词典,使用this answer to follow。
imd = ImmutableMultiDict([('default', u''), ('required', u'on'), ('name', u'short_text'), ('name', u'another')])
x = imd.to_dict(flat=False)
现在,按照需要数据的顺序,您应该添加它。
new_imd = ImmutableOrderedMultiDict([('default', x['default'][0]), ('required', x['required'][0]), ('name', x['name'][0]), ('name', x['name'][1])])
答案 1 :(得分:0)
我没有找到解决问题的方法,但确实找到了对每个变量进行排序的方法。
变量的完整列表为:ImmutableMultiDict([('id_ordine', '1650958108523345 '), ('data_start', '2018-08-06'), ('group-a[0][id_prodotto]', 'Frutta'), ('group-a[0][quantita]', '2'), ('group-0[0][macchine]', 'M01'), ('group-0[0][tipo_lavorazione]', ''), ('group-0[0][tempo_previsto_checkup]', '12'), ('group-0[0][tempo_previsto_setup]', '12'), ('group-0[0][tempo_previsto_lavorazione]', '14'), ('group-0[0][nota]', ''), ('group-0[1][macchine]', 'M02'), ('group-0[1][tipo_lavorazione]', ''), ('group-0[1][tempo_previsto_checkup]', '13'), ('group-0[1][tempo_previsto_setup]', '14'), ('group-0[1][tempo_previsto_lavorazione]', '15'), ('group-0[1][nota]', ''), ('group-a[1][id_prodotto]', 'verdura'), ('group-a[1][quantita]', '2'), ('group-1[0][macchine]', 'M03'), ('group-1[0][tipo_lavorazione]', ''), ('group-1[0][tempo_previsto_checkup]', '14'), ('group-1[0][tempo_previsto_setup]', '15'), ('group-1[0][tempo_previsto_lavorazione]', '16'), ('group-1[0][nota]', '')])
我将在此处编写代码以订购该列表,也许对某人可能会有帮助:
num_pr = 0
for pr in range(len(variabili)):
campo = []
for pr in variabili:
prodotto = []
if pr == "group-a[" + str(num_pr) + "][id_prodotto]":
campo = [variabili["group-a[" + str(num_pr) + "][id_prodotto]"]]
prodotto.append(campo)
if "group-a[" + str(num_pr) + "][quantita]" in variabili:
campo = [variabili["group-a[" + str(num_pr) + "][quantita]"]]
prodotto.append(campo)
num_mc = 0
for _ in range(len(variabili)):
for _ in range(len(variabili)):
if 'group-'+ str(num_pr) +'[' + str(num_mc) + '][macchine]' in variabili:
campo = [variabili['group-'+ str(num_pr) +'[' + str(num_mc) + '][macchine]']]
for tmp in variabili:
if 'group-'+ str(num_pr) +'[' + str(num_mc) + '][tempo_previsto_checkup]' in variabili:
campo.append(variabili['group-'+ str(num_pr) +'[' + str(num_mc) + '][tempo_previsto_checkup]'])
if 'group-'+ str(num_pr) +'[' + str(num_mc) + '][tempo_previsto_setup]' in variabili:
campo.append(variabili['group-'+ str(num_pr) +'[' + str(num_mc) + '][tempo_previsto_setup]'])
if 'group-'+ str(num_pr) +'[' + str(num_mc) + '][tempo_previsto_lavorazione]' in variabili:
campo.append(variabili['group-'+ str(num_pr) +'[' + str(num_mc) + '][tempo_previsto_lavorazione]'])
prodotto.append(campo)
break
num_mc += 1
ordine.append(prodotto)
num_pr += 1
print(ordine)