视频01:

略。。。。。。

————————————————————————————————————————————————————————————

视频02:

搜索需要外部数据源,也就是需要外部的API。

图书数据搜索用到的几个地址:

  1、关键字搜索http://t.yushu.im/v2/book/searh?q={}&start={}&ount={}  

  2、isbn搜索    http://t.yushu.im/v2/book/isbn/{isbn}  把参数放在url路径中

  3、豆瓣API     https://api.doubn.com/v2/book     有API访问频次限制,大概每小时150次,超过后你的IP地址会被暂时封闭一段时间

  没有不控制访问频率的API,没有控制,就可能会被别人搞瘫痪了。

————————————————————————————————————————————————————————————

视频03:

本视频学习的几个关键点:

1、学习在url路径中传递参数的方式
@app.route('/book/search/<q>/<page>')   接收参数
def search(q,page):             传入参数  
2、q.isdigit()函数可以判断当前字符中是不是全为数字
3、q.replace('-','')函数可以把当前字符串中的短横线替换成空格

4、在有多个条件时,条件的先后顺序是会影响执行效率的,要把大概率出现false的条件放在前面,前面的条件判断为false后,它后面的其他条件就不会再执行了。
   如果在条件判断时有耗时操作,如要查询数据库,这样的耗时条件应该尽量放到后面,因为越往后它执行的可能性越小
# 在url路径中传递参数 <q>/<page>
@app.route('/book/search/<q>/<page>')
def search(q,page):
'''
q:普通关键字 或 isbn
isbn目前有两种方式:1.isbn13——它是由13个0至9的数字组成;2.isbn10——由10个0到9的数字组成,中间含有一些短横线 -
page
'''
isbn_or_key = 'key'
if len(q) == 13 and q.isdigit(): #q.isdigit()函数可以判断当前字符中是不是全为数字
isbn_or_key = 'isbn'
short_q = q.replace('-','')
# 在有多个条件时,条件的先后顺序是会影响执行效率的,要把大概率出现false的条件放在前面,如果是false那它后面的其他条件就不会再执行了。
# 如果在条件判断时有耗时操作,如要查询数据库,这样的耗时条件应该尽量放到后面,因为越往后它执行的可能性越小
if '-' in q and len(short_q)==10 and short_q.isdigit(): # q.replace('-','')函数可以把当前字符串中的短横线替换成空格
isbn_or_key = 'isbn'
pass

————————————————————————————————————————————————————————————

视频04:

本视频学习的几个关键点:

1、把判断的代码部分提取成一个函数,以提高执行代码的复用性、可读性。
2、好的函数名,要能体现函数的基本功能。在函数体内部最上方可书写函数说明,要养成这种良好的编程习惯。
#新建一个名叫heler.py的文件,单独把抽取出来的条件语句封闭成一个函数,然后在视图函数中调用它
def is_isbn_or_key(word):
'''
当前函数说明:
:param word:
:return:
'''
isbn_or_key = 'key'
if len(word) == 13 and word.isdigit():
isbn_or_key = 'isbn'
short_word = word.replace('-','')
if '-' in word and len(short_word)==10 and short_word.isdigit():
isbn_or_key = 'isbn'
return isbn_or_key #因为这是一个函数,所以要把结果返回回去
from helper import is_isbn_or_key

# 实例化flask对象
app = Flask(__name__) # 视图函数是项目的起点,阅读或维护代码时也是从这里开始,如果视图函数特别长而乱,维护起来是个很大的问题
# 看源代码,一定要分层去看,第一遍是理清源代码的结构,先不要关注细节
@app.route('/book/search/<q>/<page>')
def search(q,page):
isbn_or_key = is_isbn_or_key(q) # 用run方法,启动web服务器
if __name__ == '__main__':
app.run(host='0.0.0.0',debug=True ,port=5000)

————————————————————————————————————————————————————————————

视频05:

本视频学习的几个关键点:
1、在python中发送http请求有两种方式:
  (1)urllib 不用安装,直接使用 from urllib import request;
  (2)requests 这个第三方库来实现,它需要安装一下(做项目时推荐使用)
2、Ctrl+Alt+I代码自动缩进
3、用三联表达式来简化代码
4、r = requests.get(url) r.status_code得到状态码 r.json()把得到的数据格式化为json r.text按字符串返回
import requests

#创建一个名为HTTP的类
class HTTP:
def get(self,url,return_json=True):
r = requests.get(url)
# r中包含了状态码、headers信息等
# 用三联表达式来简化代码
if r.status_code != 200:#取状态码
return {} if return_json else ''
return r.json() if return_json else r.text # if r.status_code == 200:#取状态码
# if return_json:
# return r.json()#json格式的通用返回方法
# else:
# return r.text
# else:
# if return_json:
# return {}
# else:
# return ''

最新文章

  1. Codeforces Round #371 (Div. 2) C. Sonya and Queries[Map|二进制]
  2. 实例化Model的三种方式
  3. R 中安装xlsx包缺少java环境解决方案
  4. poj 1904 强连通分量
  5. 浅谈 Data URI 与 BASE 64 编码
  6. 帝国cms7.0设置标题图片(缺失状态下)
  7. 深入理解linux网络技术内幕读书笔记(一)--简介
  8. 使用Discuz!自带参数防御CC攻击以及原理,修改Discuz X 开启防CC攻击后,不影响搜索引擎收录的方法
  9. C# 动态语言特性,dynamic 关键字研究
  10. Java字符串的匹配问题,String类的matches方法与Matcher类的matches方法的使用比较,Matcher类的matches()、find()和lookingAt()方法的使用比较
  11. PHP为前端CSS和JS增加时间戳版本号
  12. 熵值法 [异质指标同质化]中-Matlab 数据归一化预处理 mapminmax函数
  13. C#生成树形结构泛型类
  14. Perl输出复杂数据结构:Data::Dumper,Data::Dump,Data::Printer
  15. (转)从一道面试题彻底搞懂hashCode与equals的作用与区别及应当注意的细节
  16. Spring容器AOP的实现原理——动态代理(转)
  17. So you want to be a computational biologist?
  18. zip和zipPartitions
  19. 机器学习P7
  20. 【总结】2017年当下最值得你关注的前端开发框架,不知道你就OUT了!

热门文章

  1. UVA 12657/COJ 1329 HN第九届省赛 链表模拟
  2. SQL基础教程(第2版)第3章 聚合与排序:3-4 对查询结果进行排序
  3. python pandas写入excel文件
  4. goweb-模板引擎
  5. for-each用法误区(不能改变数组元素值)
  6. 13)编写一个子类SnakeCtrl来继承基类
  7. 吴裕雄--天生自然 JAVA开发学习:Scanner 类
  8. LGOJ1344 追查坏牛奶
  9. vuex的优缺点
  10. 吴裕雄--天生自然python Google深度学习框架:Tensorflow实现迁移学习