【问题标题】:Python Falcon filtering through URLPython Falcon 通过 URL 过滤
【发布时间】:2016-05-10 15:57:02
【问题描述】:

我正在开发一个小型 API,一切正常,我的所有请求都按预期执行,但是当我尝试通过 URL 查询过滤结果时,由于某种原因它适用于 id 但不适用于设备字段。

def on_get(self, req, resp):
    """Handles GET requests"""
    if req.get_param("id"):
        result = {'location': r.db(PROJECT_DB).table(PROJECT_TABLE).get(req.get_param("id")).run(db_connection)}

    elif req.get_param("device"):
        result = {'location': r.db(PROJECT_DB).table(PROJECT_TABLE).get(req.get_param("device")).run(db_connection)}

    else:
        location = r.db(PROJECT_DB).table(PROJECT_TABLE).run(db_connection)
        result = {'locations': [i for i in location]}
    resp.body = json.dumps(result)

例如 http://localhost:8000/location?id=(some random id) 这将起作用

但如果我这样做 http://localhost:8000/location?device=(some device) 这将不起作用,返回 null

那么谁能告诉我我做错了什么?或者如果有人知道使用 URL 进行过滤的更好方法,那就更好了?

注意:我正在使用 rethinkdb

编辑:

这是我通常拥有的:

{
  "locations": [
    {
      "id": "4bf4b94f-747a-42db-9d54-a8399d995025",
      "location": "gps coords",
      "device": "Device 2"
    },
    {
      "id": "b5cce561-37d2-42e7-86e4-a31c008b0af2",
      "location": "gps coords",
      "device": "Device 1"
    },
    {
      "id": "bebba7cf-710c-4ee8-ad69-2d58174d4e02",
      "location": "gps coords",
      "device": "Device 1"
    },
    {
      "id": "e928f84b-60ff-40f3-b839-920bc99e5480",
      "location": "gps coords",
      "device": "Device1"
    }
  ]
}

按 id 过滤可以,但不能按奇怪的设备过滤

【问题讨论】:

  • 显然device=(some device) 没有任何意义。或者您是否在您的应用中登录以验证 result 与 null 不同?
  • 您是否检查了请求中的类型以及从位置查询中提取的数据?可能那里不匹配
  • 是的,我有,没有任何迹象表明不匹配

标签: python api falcon


【解决方案1】:

我找到了这个问题的答案,之所以没有war,是因为rethinkdb只通过get查询上的主键获取

result = {'location': r.db(PROJECT_DB).table(PROJECT_TABLE).get(req.get_param("device")).run(db_connection)}

所以我应该做的是按照我想要的那样过滤结果,这样就可以了

result = {'location': list(r.db(PROJECT_DB).table(PROJECT_TABLE).filter({'device': param}).run(db_connection))}

感谢大家的帮助,希望这个答案能有所帮助。

【讨论】:

    猜你喜欢
    • 2017-12-12
    • 2017-12-28
    • 1970-01-01
    • 2017-07-29
    • 2023-03-15
    • 1970-01-01
    • 2015-06-09
    • 2020-03-07
    • 1970-01-01
    相关资源
    最近更新 更多