当前位置:   article > 正文

flaskappbuilder源码分析(一)---视图函数(RestCRUDView)_flask-appbuilder 案例

flask-appbuilder 案例

项目使用了flaskappbuilder这个第三方包,目前项目是前后端不分离的,视图直接继承ModelView,CRUD开发方便快捷;但是前后端不分离有很多缺点,打算把项目改成前后端分离的项目。一直在纠结要不要换掉flaskappbuilder使用flask restful, 如果换掉flaskappbuilder的话,整个项目重构工作量太大。看了flaskappbuiler的源码之后,惊叹它的强大,它提供了很多视图函数,其中就包括提供api接口的视图函数RestCRUDView。

flaskappbuilder视图继承关系

BaseView <— BaseModelView <— BaseCRUDView <— RestCRUDView <— ModelView
ModelView视图提供前后端不分离的接口,RestCRUDView提供类rest 风格的接口

举例

RestCRUDView的获取列表的接口,接口中包含分页,过滤,排序

class RestCRUDView(BaseCRUDView):
    """
        This class view exposes REST method for CRUD operations on you models
    """
    # 获取列表接口
    @expose_api(name='read', url='/api/read', methods=['GET'])
    @has_access_api
    @permission_name('list')
    def api_read(self):
        """
        """
        # Get arguments for ordering
        if get_order_args().get(self.__class__.__name__):
            order_column, order_direction = get_order_args().get(self.__class__.__name__)   # 获取排序的字段和生序还是降序
        else:
            order_column, order_direction = '', ''
        page = get_page_args().get(self.__class__.__name__)      
        page_size = get_page_size_args().get(self.__class__.__name__)     # 获取分页参数
        get_filter_args(self._filters)           # 获取过滤参数
        joined_filters = self._filters.get_joined_filters(self._base_filters)
        count, lst = self.datamodel.query(joined_filters, order_column, order_direction, page=page, page_size=page_size)
        result = self.datamodel.get_values_json(lst, self.list_columns)       # 获取列表
        pks = self.datamodel.get_keys(lst)
        ret_json = jsonify(label_columns=self._label_columns_json(),
                           list_columns=self.list_columns,
                           order_columns=self.order_columns,
                           page=page,
                           page_size=page_size,
                           count=count,
                           modelview_name=self.__class__.__name__,
                           pks=pks,
                           result=result)
        response = make_response(ret_json, 200)
        response.headers['Content-Type'] = "application/json"
        return response
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
使用方式:
GET     http://127.0.0.1:8088/slicemodelview/api/read?page_SliceModelView=1&psize_SliceModelView=25
  • 1
返回结果

在这里插入图片描述
这个接口的缺点是分页参数固定,但是可以重新实现分页参数获取这部分。视图函数继承RestCRUDView之后,基本的增删改查接口我们就不用自己实现了,只需要实现其他的接口,大大节省了重构的时间,减少了重构的工作量。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/857237
推荐阅读
相关标签
  

闽ICP备14008679号