如何使用Flask处理从jquery数据表发送的服务器端参数?

时间:2014-07-22 14:41:16

标签: python json flask jquery-datatables

启用服务器端处理时,我在处理jquery datatables 1.10发送的参数时遇到了一些问题。我在javascript端初始化了数据表,如下所示:

var table = $('#mytable').DataTable( {
                "processing": true,
                "serverSide": true,
                "ajax": {
                    'url': url,
                    'type': 'POST'
                },
                "columns": data
            } );

使用以下命令在基于Flask的服务器中接收POST请求:

@app.route('/data/<data_key>', methods=['POST'])
def get_data(data_key):
    print request.form

    # do some processing here in order to filter data
    # ...

    return Response(json.dumps(data), status=200, mimetype='application/json')

为了过滤我试图查看request.form内部的数据,但结果很奇怪,无法轻易转换为对象数组。我得到这样的事情:

ImmutableMultiDict(
[
('columns[0][data]', u'ReportDate'), 
('draw', u'1'),
('columns[1][name]', u''), 
('columns[1][data]', u'FundName'),
('columns[0][orderable]', u'true'), 
('columns[1][searchable]', u'true'), 
('columns[1][orderable]', u'true'), 
('order[0][column]', u'0'), 
('columns[0][name]', u''), 
('order[0][dir]', u'asc'), 
('search[value]', u''), 
('columns[1][search][regex]', u'false'), 
('columns[0][search][value]', u''), 
('search[regex]', u'false'), 
('columns[1][search][value]', u''), 
('columns[0][search][regex]', u'false'), 
('start', u'0'), 
('length', u'10'), 
('columns[0][searchable]', u'true')
]
)

在jquery datatables文档中,他们说:

  

发送到服务器的order [i]和columns [i]参数是信息数组:

     

order [i] - 是一个数组,用于定义排序的列数 - 即如果数组长度为1,则执行单列排序,否则正在执行多列排序。

     

columns [i] - 定义表中所有列的数组。

     

在这两种情况下,i都是一个整数,它将改变以指示数组值。在大多数现代服务器端脚本环境中,这些数据将自动作为数组提供给您。

但是,Flask将这些数据作为一个简单的字典提供,有没有办法轻松地将它转换为一个对象数组?

2 个答案:

答案 0 :(得分:11)

获取DataTable以发送json

ajax: {
    url: "/api/data_table",
    type: "POST",
    data: function ( args ) {
      return { "args": JSON.stringify( args ) };
    }
},

在烧瓶中,解析json

args = json.loads(request.values.get("args"))
columns = args.get("columns")

答案 1 :(得分:1)

你可以使用我发现的https://github.com/bernii/querystring-parser

这个小巧的包
from querystring_parser import parser
args = parser.parse(request.query_string)
print args['columns']