我正在开发我的第一个烧瓶类/ sqlalchemy /棉花糖REST API。我的数据库中有一个Delivery
枚举的status
表:
按预期,GET /deliveries/
返回交货清单。这是从视图中提取的当前代码:
deliveries_schema = DeliverySchema(many=True) # a marshmallow-sqlalchemy ModelSchema
class Deliveries(FlaskView):
@use_kwargs(deliveries_schema.fields)
def index(self, **kwargs):
deliveries = Delivery.query.filter_by(**kwargs)
return deliveries_schema.jsonify(incidents)
是的,我将webargs参数直接传递给filter_by
。但是,假设对于客户端中的给定屏幕,我只需要查看状态为新的或已请求的交货。实施某种过滤器语法显然很有意义,因为我要对所有类型执行类似的操作
不幸的是,以下GET失败:
/deliveries/?status=new&status=requested
仅返回status=new
的交货-实际上,它总是选择两者中的第一个。/deliveries/?status=new,requested
导致棉花糖SQLAlchemy返回422无法处理的实体,这是可以理解的,因为new,requested
在status
枚举中不是一个选择。我不确定这是功能还是错误。顺便说一句,我可以成功地传递两个不同的过滤器参数,例如/deliveries/?status=requested&user_id=123
正常工作。
无论如何,排序和分页也是一样。目前,我不知道如何在我的API中处理它们。我看到的当前问题:
DeliverySchema
的参数。这似乎表明会对架构代码产生影响。filter_by
,因为某些参数不会成为过滤器。但是对于第一个用例,我很高兴能够根据新状态和请求状态进行过滤。排序和分页可以稍后进行。我什至不知道应该在堆栈中的哪个地方处理它,更不用说如何实现解决方案了。当然,这是一个非常普遍的用例,任何指针都值得赞赏。