flaskappbuilder源码分析(一)---视图函数(RestCRUDView)

项目使用了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
使用方式:
GET     http://127.0.0.1:8088/slicemodelview/api/read?page_SliceModelView=1&psize_SliceModelView=25
返回结果

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值