# 需要导入模块: from marshmallow import fields [as 别名]
# 或者: from marshmallow.fields import Boolean [as 别名]
def routes(app, models, schemas, filter_fields):
class WidgetViewBase(GenericModelView):
model = models["widget"]
schema = schemas["widget"]
class WidgetListView(WidgetViewBase):
filtering = Filtering(
color=operator.eq,
color_allow_empty=ColumnFilter(
"color", operator.eq, allow_empty=True
),
size=ColumnFilter(operator.eq, separator="|"),
size_min=ColumnFilter("size", operator.ge),
size_divides=ColumnFilter(
"size", lambda size, value: size % value == 0
),
size_is_odd=ModelFilter(
fields.Boolean(),
lambda model, value: model.size % 2 == int(value),
),
size_min_unvalidated=ColumnFilter(
"size", operator.ge, validate=False
),
size_skip_invalid=ColumnFilter(
"size", operator.eq, skip_invalid=True
),
)
def get(self):
return self.list()
class WidgetSizeRequiredListView(WidgetViewBase):
filtering = Filtering(size=ColumnFilter(operator.eq, required=True))
def get(self):
return self.list()
class WidgetColorCustomListView(WidgetViewBase):
filtering = Filtering(color=filter_fields["color_custom"])
def get(self):
return self.list()
class WidgetDefaultFiltersView(WidgetViewBase):
filtering = Filtering(
color=ModelFilter(
fields.String(missing="red"),
lambda model, value: model.color == value,
),
size=ColumnFilter(operator.eq, missing=1),
)
def get(self):
return self.list()
api = Api(app)
api.add_resource("/widgets", WidgetListView)
api.add_resource("/widgets_size_required", WidgetSizeRequiredListView)
api.add_resource("/widgets_color_custom", WidgetColorCustomListView)
api.add_resource("/widgets_default_filters", WidgetDefaultFiltersView)