学习python-20191208(1)-Python Flask高级编程开发鱼书_第03章_数据与flask路由

视频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 ''

 

posted on 2019-12-08 19:07  闪亮的金子  阅读(436)  评论(0编辑  收藏  举报