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