赞
踩
项目使用了flaskappbuilder这个第三方包,目前项目是前后端不分离的,视图直接继承ModelView,CRUD开发方便快捷;但是前后端不分离有很多缺点,打算把项目改成前后端分离的项目。一直在纠结要不要换掉flaskappbuilder使用flask restful, 如果换掉flaskappbuilder的话,整个项目重构工作量太大。看了flaskappbuiler的源码之后,惊叹它的强大,它提供了很多视图函数,其中就包括提供api接口的视图函数RestCRUDView。
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之后,基本的增删改查接口我们就不用自己实现了,只需要实现其他的接口,大大节省了重构的时间,减少了重构的工作量。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。