过滤/子请求以获得结果

时间:2015-06-06 11:11:19

标签: python api eve

  

MongoDB的

 db.entity.find()
{
        "_id" : ObjectId("5563a4c5567b3104c9ad2951"),
        "section" : "section1",
        "chapter" : "chapter1",
        ...
},
{
        "_id" : ObjectId("5563a4c5567b3104c9ad2951"),
        "section" : "section1",
        "chapter" : "chapter2",
        ...
},....

在我的数据库中,集合entity主要包含sectionchapter。只有chapter值是唯一的,当我们查询给定部分的mongo时,它将返回多个结果(一个部分与许多章节匹配)。

我需要做的是获取给定部分的所有集合,这很简单。

  

settings.py

URL_PREFIX = "api"

API_VERSION = "v1"

ALLOWED_FILTERS = ['*']

schema = {
    'section': {
        'type': 'string',
    },  
    'chapter': {
        'type': 'string',
    },
}

entity = {
    'item_title': 'entity',
    'resource_methods': ['GET'],

    'cache_control': '',
    'cache_expires': 0,

    'url': 'entity/<regex("\w+"):section>/section',

    'schema': schema
}

DOMAIN = {
    'entity': entity,
}
  

run.py

from eve import Eve

if __name__ == '__main__':                      
    app.run(debug=True)   
  

我尝试了什么

curl -L -X GET -H 'Content-Type: application/json' http://127.0.0.1:5000/api/v1/entity/23/section
  

输出

{ 
  "_status": "ERR",
  "_error": {
    "message": "The requested URL was not found on the server.  If you entered the URL manually please check your spelling and try again.",
    "code": 404
  }
}

我做错了什么?如何获得一个部分的所有实体?

2 个答案:

答案 0 :(得分:1)

您是否尝试过编写这样的网址:

http://127.0.0.1:5000/api/v1/entity?where=section=='section32'

请看一下这个python-eve.org/features.html#filtering

答案 1 :(得分:0)

尝试:

curl -H 'Accept: application/json' http://127.0.0.1:5000/api/v1/entity/section23/section

您希望在网址中使用section23,因为这与正则表达式和数据库中存储的实际值相匹配。

您可能还想将网址更改为:

'url': 'entity/<regex("\w+"):section>'

允许这样的网址:

http://127.0.0.1:5000/api/v1/entity/section23

这可能更具语义性。希望这会有所帮助。