• 学习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 ''
  • 相关阅读:
    Java多线程系列--“JUC集合”08之 LinkedBlockingQueue
    Java多线程系列--“JUC集合”07之 ArrayBlockingQueue
    Java多线程系列--“JUC集合”06之 ConcurrentSkipListSet
    Java多线程系列--“JUC集合”05之 ConcurrentSkipListMap
    Java多线程系列--“JUC集合”04之 ConcurrentHashMap
    Java多线程系列--“JUC集合”03之 CopyOnWriteArraySet
    Java多线程系列--“JUC集合”02之 CopyOnWriteArrayList
    Java多线程系列--“JUC集合”01之 框架
    Java多线程系列--“JUC锁”11之 Semaphore信号量的原理和示例
    Java多线程系列--“JUC锁”10之 CyclicBarrier原理和示例
  • 原文地址:https://www.cnblogs.com/hzjdpawn/p/12004602.html
Copyright © 2020-2023  润新知