【问题标题】:Python Eve contains filterPython Eve 包含过滤器
【发布时间】:2014-05-30 14:24:53
【问题描述】:

有什么方法可以返回包含某些值的项目?例如。

GET /people?contains="foo"

返回名称中包含“foo”一词的所有人员。

提前致谢

【问题讨论】:

    标签: python rest flask eve


    【解决方案1】:

    您可以使用 mongodb $regex 运算符,它在 Eve 中默认被列入黑名单 (MONGO_QUERY_BLACKLIST = ['$where', '$regex'])。

    MONGO_QUERY_BLACKLIST = ['$where'] 添加到您的settings.py。然后你可以像这样查询你的 API:

    ?where={"name": {"$regex": ".*foo.*"}}.

    不过要小心。如果您不控制客户端,启用正则表达式可能会增加您的 API 漏洞。

    【讨论】:

    • 感谢您的回复!但我真正需要的是 $text 运算符(全文搜索)。我认为这还没有实现,我会尽快分叉并发送拉取请求
    • @Skhaz ,$text 运算符的工作进展如何?
    • 这也可以通过在 settings.py 中为架构定义一个“附加查找”来完成吗?
    【解决方案2】:

    我自己并不熟悉夏娃。但是看看它的网页似乎暴露了 Flask 的所有功能。

    您需要查看文档中有关访问请求数据的this 页面。

    在您的 Flask 应用程序中,定义一个同时接受 POST 和 GET 请求的方法,然后您可以通过执行 request.args.get('contains', '') 访问 foo

    这就是我的意思:

    @app.route('/people', methods=['POST', 'GET'])
    def get_people():
        search_key = request.args.get('contains', '')
        #search for people containing 'foo' in your DB
    

    希望这能给你一个关于如何做事的起点。

    【讨论】:

    • 我在想一些更“自动”的东西。感谢您的回复!
    猜你喜欢
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    • 2011-08-10
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多