【发布时间】:2012-12-28 16:21:48
【问题描述】:
我正在使用 Python 实现服务器端过滤以服务 KendoUI 的 Grid 组件。
我面临的问题是它默认生成的 AJAX 调用似乎与 Flask 的内置 URL 解析器和 Python 的 urlparse 模块都不兼容。
这是我遇到问题的查询字符串类型的人为示例:a=b&c=d&foo[bar]=baz&foo[baz]=qis&foo[qis]=bar
这是我想要的结果:
{
'a': 'b',
'c': 'd',
'foo': {
'bar': 'baz',
'baz': 'qis',
'qis': bar'
}
}
不幸的是,如果将 request.args 传递给 Flask 端点,您可以从这里得到:
{
'a': 'b',
'c': 'd',
'foo[bar]': 'baz'
'foo[baz]': 'qis'
'foo[qis]': 'bar'
}
更糟糕的是,在实践中,结构可能有好几层深。将列 foo 过滤为仅值等于 'bar' 的行的基本调用将产生以下结果:
{
'filter[logic]': 'and',
'filter[filters][0][value]': 'bar',
'filter[filters][0][field]': 'foo',
'filter[filters][0][operator]': 'eq'
}
我检查了 RFC,它要求查询字符串只包含“非分层”数据。虽然我相信它指的是 URI 所代表的对象,但在我能找到的规范中并没有提供这种类型的数据结构。
我开始编写一个函数,它接受一个参数字典并返回它们所代表的嵌套结构,但我很快意识到这是一个微妙的问题,而且肯定有人以前遇到过这个问题。
是否有人知道以我想要的方式解析这些参数的模块,或者我可能忽略的解析它们的优雅方式?
【问题讨论】:
-
只能是GET参数吗? JSON格式不好吗?
-
好吧,kendoUI 的 Grid 默认尝试使用 GET 参数,例如。您也许可以覆盖它,但它似乎也打破了 RESTful 范式——发送 JSON 需要一个 POST,并且您没有更新任何内容,只获取项目列表。 (我可能离基地很远,所以请随时纠正我)
-
@NickODell 是的,这似乎是同一个问题,我在搜索中没有找到那个问题。尽管如此,答案并没有解决我的问题,它只是确认没有标准的方法来做到这一点。
-
KendoUI 的 Grid 控件由 DataSource 对象提供支持。 DataSource 允许通过 jQuery 的
$.ajax方法配置如何通过 AJAX 进行 CRUD。看起来我可以使用 JSON,然后。尽管如此,这对于 Python 来说似乎还是很方便的,因为显然 PHP 和 RoR 都处理在查询字符串中传递的嵌套字典。