首页 > 解决方案 > 使用 nginx 的数据发布未正确排序

问题描述

我创建了一个 Flask 应用程序,在我的本地计算机上一切正常,我可以从 HTML 页面上的表单中插入数据,然后将数据传递给程序进行详细说明。

我想在 Ubuntu 服务器上移动这个应用程序,我使用这个指南设置了所有的东西,比如 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 = []

标签: pythonnginxflask

解决方案


nginx没有任何问题。基本上您正在使用ImmutableMultiDict并且不维护此类数据类型的顺序。如果您想要特定的数据顺序,那么您应该使用ImmutableOrderedMultiDict它来存储您的数据并发送它作为响应。

更新:

免责声明:我不太熟悉烧瓶,我的解决方案将是一个 hack,我不建议在没有从非常了解烧瓶的人那里得到验证的情况下在生产中使用它。

根据您编写的将ImmutableMultiDict格式更改为ImmutableOrderedMultiDict. 首先你需要把它转换成普通字典,使用这个答案来跟随

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])])

推荐阅读