6.2 使用ViewModel处理书籍数据

image.png 通过书籍搜索页面的观察,我们可以分析出,这个页面需要返回的有三部分数据 1.书籍详情信息 2.搜素关键词 3.总记录数

而我们现在的原始数据里 1.数据详情数据载ISBN搜索和关键词搜索返回的数据格式不统一 2.原始数据里并没有搜索关键词,需要手动添加 3.ISBN搜索只返回0或1条数据,需要手动计算出总记录数

这些都可以在ViewModel层做统一处理。

view_models/book.py

小建议: 1.在python中,并不建议,为不同包下的文件起不同的后缀名,如book_web.py,book_model.py 2.数据处理,如果是前后端分离的项目,建议在客户端有js去操作,如果是模板渲染HTML,建议在服务器端去操作 3.一种编程思想:在处理多个数据的时候,可以先封装出处理单个数据的方法,然后再循环调用这个方法,来处理多个数据。

class BookViewModel:

    @classmethod
    def package_single(cls, data, keyword):
        returned = {
            'book': [],
            'keyword': keyword,
            'total': 0
        }
        if data:
            returned['total'] = 1
            returned['book'] = [BookViewModel.__cut_book_data(data)]

        return returned

    @classmethod
    def package_collection(cls, data, keyword):
        returned = {
            'book': [],
            'keyword': keyword,
            'total': 0
        }
        if data:
            returned['total'] = data['total'],
            returned['book'] = [BookViewModel.__cut_book_data(book) for book in data["books"]]

        return returned

    @classmethod
    def __cut_book_data(cls, data):
        book = {
            'title': data['title'],
            'publisher': data['publisher'],
            'pages': data['pages'] or '',
            'author': '、'.join(data['author']),
            'price': data['price'],
            'summary': data['summary'] or '',
            'image': data['image']
        }
        return book

Last updated

Was this helpful?