使用Flask访问参数中的数组/列表

时间:2015-03-22 03:48:44

标签: python mongodb datatable flask datatables

我正在修改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)中,它说:"在大多数现代服务器端脚本环境中,这些数据将自动作为数组提供给您。"

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

2 个答案:

答案 0 :(得分:0)

没有看到任何实际的代码,很难肯定地说,但我的信念是,你的代码类似于

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

了解此处发生的事情的关键是request.args。它是MultiDict,由Werkzeug提供的数据结构。

正如文档所述,MultiDict旨在处理共享相同密钥的多个值。那么为什么你的代码没有用呢?

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

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

答案 1 :(得分:0)

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

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

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

代码从此处翻录:https://github.com/DataTables/DataTables/issues/311

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