【问题标题】:Accessing arrays/lists within parameters using Flask使用 Flask 访问参数中的数组/列表
【发布时间】:2015-03-22 03:48:44
【问题描述】:

我正在修补 Flask + Datatables + Mongo 来创建一个测试网络应用程序。我在服务器端数据模式下使用Datatables,它在请求数据中发送的参数如下:

columns[0][data]
columns[1][name]
columns[1][orderable]
columns[3][data]
columns[2][orderable]
columns[3][searchable]
order[0][dir]
columns[1][search][regex]
columns[3][orderable]
columns[0][search][value]
columns[2][searchable]
columns[3][search][regex]
columns[0][search][regex]
start
columns[0][searchable]
draw
columns[2][search][value]
columns[2][search][regex]
columns[1][data]
order[0][column]
columns[1][searchable]
columns[0][name]
columns[2][data]
columns[0][orderable]
search[value]
columns[3][name]
_
search[regex]
columns[1][search][value]
columns[2][name]
length
columns[3][search][value]

举个例子,我希望能够访问“订单”列表来做类似的事情

len(order)

查看列表中有多少项目,但我不能,因为 Flask 将每个参数视为单独的项目而不是列表。有没有办法安全地解决这个问题?

在 Datatables 文档 (https://datatables.net/manual/server-side) 中,它说:“在大多数现代服务器端脚本环境中,这些数据将自动以数组的形式提供给您。”

提前感谢您提供的任何帮助。

【问题讨论】:

    标签: python mongodb datatable flask datatables


    【解决方案1】:

    没有看到任何实际代码,很难确定,但我相信在某个地方你有类似的代码

    order = request.args.get('order')
    len(order)
    

    知道这里发生了什么的关键是request.args。是MultiDictWerkzeug提供的数据结构。

    如文档所述,MultiDict 旨在处理共享同一键的多个值。那么为什么您的代码不起作用?

    MultiDict.get 返回与键匹配的第一个值。要获取所有值,您需要使用MultiDict.getlist 方法。

    order = request.args.getlist('order')
    len(order)
    

    【讨论】:

    • 感谢您的帮助。我认为我试过了,得到了一个空列表。所以我只是稍微改变了我的方法。见下文。
    【解决方案2】:

    所以,我可以通过简单地告诉 Datatables 在发送 POST 之前将其转换为 JSON 来解决这个问题。然后我只用 Python 解析 JSON 就得到了想要的结果。

    发送 JSON 的数据表初始化如下所示:

    ajax: {
      url: 'myUrl',
      data: function ( d ) {
        return { 'd': JSON.stringify( d ) };
      }
    }
    

    从这里撕下的代码:https://github.com/DataTables/DataTables/issues/311

    从安全角度来看,这可能很糟糕,但我只是开发这个应用程序供我自己在本地使用,所以我不太担心。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多