view_models\book.py里的问题
"""
数据解析层
"""
class BookViewModel:
def __init__(self,data):
self.data = data
self.book = {
'title':data['title'], #问题:出现KeyError: 'title'
'publisher': data['publisher'],
'pages': data['pages'] or '',
'author': '、'.join( data['author']), # .join() 代表连接
'price': data['price'],
'summary': data['summary'] or '',
'image': data['image']
}
def package_single(self,keyword):
returned = {
'books': [],
'total': 0,
'keyword': keyword
}
if self.book:
returned['total'] = 1
returned['books'] = [self.book]
return returned
def package_collection(self,keyword):
returned = {
'books': [],
'total': 0,
'keyword': keyword
}
if self.book: #问题:一开始以为这里的问题,然后我把这个if的注释掉了,但是还是出现了KeyError: 'title'的错误
returned['total'] = self.data['total']
returned['books'] = [self.book for book in self.data['books']] #问题:这里的循环可能有写法问题,但是数据没有传入,我没办法解决这个问题
return returned
以上是我重构代码的方案,这个方案没有之前重构spider里的yushu_book好,但是我是按照自己的思路来重构的.
1.最主要的问题是访问关键词查询后,构造函数中的self.book={‘title’:data[‘title’]}出现KeyError的报错,而且,只有关键字的索引会出现这样的问题,用isbn的索引不会出现问题,都是调用构造函数里的self.book{},为什么一个正常显示,一个出现差找不到字典,
我尝试了很多解决办法,包括断点调试和print()等方法,一步一步的排查,但很难理解,同样两个类方法,调用同一个实例变量,出现的结果竟然完全不同,.
使用的查询参数是:
ISBN查询:http://localhost:88/book/search/?q=9787070511209
2.因为我是按照自己的思路去重构代码,我会按照课程的代码重新敲一遍,.课程继续下去,但是不找到问题核心,感觉自己的思路出现了阻断.不知道我是哪一步写错了?
3.我把代码打包上传,麻烦老师有空查看下,主要模块为
视图函数模块:app\web\book.py
HTTP访问模块:spider\yushu_book.py
视图模型:view_models.py
不知道代码的传递方式.就用最笨的方法了
7月老师深入浅出剖析Flask核心机制,和你一起探讨Python高级编程
了解课程