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

时间:2015-12-25 03:43:48

标签: python sqlalchemy eve

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

我的API端点全部设置完毕,并且工作正常。

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

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

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

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

2 个答案:

答案 0 :(得分:1)

如果我理解正确,Dynamic Lookup Filter内的Pre-Request Event Hook内容似乎可以满足您的过滤需求。

答案 1 :(得分:0)

我不知道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是否有帮助。