我正在使用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过滤功能,但始终在数据库级别上进行过滤,而不是序列化/响应级别。
答案 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是否有帮助。