首页 文章

如何定义自定义筛选器并将其绑定到资源终结点

提问于
浏览
2

我正在使用Python EVE,EVE-SQLAlchemy,Flask,Flask-SQLAlchemy,SQLAlchemy和Postgres数据库 .

我有我的API endpoints 所有设置,他们正在开箱即用 .

现在我正在尝试过滤some_model资源返回的项目,以便它只返回属于某个用户的项目(GET)(执行API请求的用户)或具有特定名称(前缀) . 执行此操作的SQlAlcehmy代码如下:

session.query(SomeModel).filter(or_(SomeModel.name.like('SOMETHING_%'), SomeModel.account_id==1)).all()

我已经查看了请求前后挂钩,用户限制资源访问以及我能找到的其他所有内容,但似乎没有描述如何将自定义过滤器应用于某些 endpoints /资源的(所有)GET请求 .

有点像URL过滤功能,但始终在数据库级别上进行过滤,而不是序列化/响应级别 .

2 回答

  • 0

    如果我理解正确,看起来Dynamic Lookup Filter内的Dynamic Lookup Filter将适合您的过滤需求 .

  • 1

    我不知道 like 查询的确切语法,但 or 可以像这样实现:(我测试了它,它的工作原理)

    def pre_GET(resource, request, lookup):
        # only return documents for account_id 1 or where name is metalstorm
        lookup['or_'] = [{'account_id': 1}, {'name': 'metalstorm'}]
    

    对于 like 查询,请查看this是否有帮助 .

相关问题