Python Falcon通过URL过滤

时间:2016-05-10 15:57:02

标签: python api falcon

我有一个我正在处理的小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过滤可以正常工作,但不适用于奇怪的设备

1 个答案:

答案 0 :(得分:0)

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

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))}

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