Flask框架下的view_model业务处理层

Flask框架下的view_model业务处理层

# 定义单本的类
# 静态方法是直接可以[类名.方法]调用的
class BookViewModel:
    def __init__(self, book):
        self.title = book['title']
        self.publish = book['publish']
        self.pages = book['pages']
        self.author = '、'.join(book['author'])
        self.price = book['price']
        self.summary = book['summary']
        self.image = book['image']
        self.isbn = book['isbn'] # 得把isbn传进来的
        self.pubdate = book['pubdate']# 出版社
        self.binding = book['binding']# 装帧


    # 用来处理万一只有两项数据传入,则不要后面的/
    # 添加装饰器@property是允许函数以对象的方式被调用
    @property
    def intro(self):
        # filter过滤器,返回如果是flase,则会被过滤,返回如果是true,则会被保留
        # self.author, self.publish, self.price会不断被带入
        intros = filter(lambda x: True if x else False,
                       [self.author, self.publish, self.price])
        # 以'/'的形式连接起来
        return '/'.join(intros)


# 定义一个集合的类
class BookCollection:
    def __init__(self):
        self.total = 0
        self.book = []
        self.keyword = ''



    # 单本的实例方法
    def fill(self, qinshu_book, keyword):
        self.total = qinshu_book.total
        self.keyword = keyword
        self.books = [BookViewModel(book) for book in qinshu_book.books]


class _BookViewModel:
    # 把keyword当关键字传入
    # 单本的格式
    def package_single(self, data, keyword):
        # 返回的格式
        returned = {
            'books': [],
            'total': 0,
            'keyword': keyword
        }
        # 万一data为1
        if data:
            returned['total'] = 1
            # 调用裁剪函数
            returned['books'] = [self.__cut_book_data(data)]
        return returned

    # 一套集合的书籍
    def package_collection(self, data, keyword):
        returned = {
            'books': [],
            'total': 0,
            'keyword': keyword
        }
        if data:
            returned['total'] = data['total']
            returned['books'] = [self.__cut_book_data(book) for book in data['books']]
            # 列表推导式,重复调用剪切函数遍历


    # 裁剪函数,裁剪部分不需要的数据
    def __cut_book_data(self, data):
        book = {
            'title': data['title'],
            'publisher': data['publisher'],
            'pages': data['pages'] or '',
            # 逻辑运算符 or实现只要一个是真,就是真
            # or是用来解决有些书籍返回null,是json格式,我们需要字符串格式,
            'author': '、'.join(data['author']), # 作者之间用、分隔开来
            'price': data['price'],
            'summary': data['summary'] or '',
            'image': data['image']
        }
        return book
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值