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

猜你喜欢

转载自blog.csdn.net/weixin_43734271/article/details/88996536