首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Flask读取数据的POST请求-restless

从Flask读取数据的POST请求-restless
EN

Stack Overflow用户
提问于 2015-09-22 05:38:29
回答 1查看 530关注 0票数 0

我正在尝试使用KendoUI网格和Flask-Restless web服务来实现服务器端过滤。

我的数据源对象如下所示:

代码语言:javascript
复制
        var myDataSource = new kendo.data.DataSource({
        transport: {
            read: {
              type: 'GET',
              url: "http://localhost:5000/api/geo",
              contentType: "application/json",
              dataType: "json",
            },
            parameterMap: function(data, type) {
              if (type == "read") {
                // console.log(data.filter);
                return {
                  page: data.page,
                  q: data.filter
                }
              }
            },
        },
        schema: {
          data: 'objects',
          total: "num_results", 
        },
        serverPaging: true,
        serverFiltering: true,
        pageSize: 100,
    }); 

在服务器端,我想截取过滤参数,适当地修改它们以适应Flask-Restless查询对象格式,并将它们传递给REST端点。但是,如果使用GET请求,flask.request.args对象看起来就像一个扁平的字典,解析起来很繁琐。预处理器中的以下代码:

代码语言:javascript
复制
 for key, value in flask.request.args.iteritems():
    print '%s : %s' % (key, value)

产生:

代码语言:javascript
复制
q[filters][0][value] : 106
q[filters][1][field] : county_id
q[filters][1][operator] : eq
q[filters][1][value] : 107
q[filters][0][operator] : eq
q[filters][0][field] : county_id
q[logic] : and

我想我有两个问题: 1.可以使用POST请求从Flask-Restless端点读取数据吗? 2.如果对#1的回答是肯定的:如何将data.filter对象从Kendo DataSource传递到Flask-Restless web服务?

我确实有权访问预处理器中的flask.reguest.args (在GET请求的情况下),然而,args结构将嵌套对象表示为字符串键,如:'qfiltersvalue‘,这很难解析。我希望有更好的方法。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2015-09-22 07:23:07

编辑2-

这将部分格式化来自$.ajax类型请求的数据,以便与Flask-Restless中的GET请求一起使用。您可以将其用于GET (就像您在上面的示例中使用的一样),并且不需要使用POST。希望这会有所帮助,如果没有,那么您将需要提供一些更多的数据或尝试,以帮助引导正确的方向。此外,操作仍然需要几个步骤(即逻辑)来进行转换。我认为这将是一个很好的练习来完成...

如果打印flask.request.args,应该会得到如下内容:

代码语言:javascript
复制
import pprint
pprint(q)

# returns this
{'filters': [{'field': 'county_id', 'operator': 'eq', 'value': 106},
         {'field': 'county_id', 'operator': 'eq', 'value': 107}],'logic':'and'}

然后,您只需使用built-ins的某些功能将其处理为Restless Search Queries的正确格式(根据规范)。

代码语言:javascript
复制
# Python 3

new_filter = {}
for key, value in q.items():
    if key == 'filters':
        new_filter[key] = []
        for item in q[key]:
            rename_data = {
                     'name': item['field'] ,
                     'op':   item['operator'],
                     'val':  item['value']
                   }
            new_filter[key].append(rename_data)
     else:
         new_filter[key] = value

返回..。

代码语言:javascript
复制
{'filters': [{'name': 'county_id', 'op': 'eq', 'val': 106},
         {'name': 'county_id', 'op': 'eq', 'val': 107}],
'logic': 'and'}

然后可以将其作为query传递。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32704931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档