<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                項目結構 ~~~sh ├── static #靜態資源 ├── templates ├── fisher.py ~~~ ## 首先先構建搜索關鍵字的視圖函數 ~~~python from flask import Flask app = Flask(__name__) @app.route('/book/search/<q>/<page>') def search(q,page): """ q:代表普通關鍵字 或 isbn isbn : isbn10:由10位數字組成,其中可能包含'-' isbn13:由13位數字組成 key: """ key_or_isbn = 'key' if len(q) == 13 and q.isdigit(): key_or_isbn = 'isbn' short_q = q.replace('-', '') if len(q) == 10 and len(short_q) and short_q.isdigit(): key_or_isbn = 'isbn' return key_or_isbn @app.route('/') def hello_world(): return 'Hello World!' if __name__ == '__main__': app.run() ~~~ 項目結構 ~~~sh ├── static #靜態資源 ├── templates ├── fisher.py ├── helper.py ~~~ 然后把判斷邏輯抽取出來,放到一個新文件里。 ~~~python #helper.py def is_isbn_or_key(word): """ q:代表普通關鍵字 或 isbn isbn : isbn10:由10位數字組成,其中可能包含'-' isbn13:由13位數字組成 key: """ key_or_isbn = 'key' if len(word) == 13 and word.isdigit(): key_or_isbn = 'isbn' short_word = word.replace('-', '') if len(word) == 10 and len(short_word) and short_word.isdigit(): key_or_isbn = 'isbn' return key_or_isbn ~~~ 在主函數里導入`hellper.py`,調用方法返回判斷結果 項目結構 ~~~sh ├── static #靜態資源 ├── templates ├── fisher.py ├── helper.py ├── HttpRequest.py ~~~ ## HTTP請求 創建一個`HttpRequest.py` ~~~python # HttpRequest.py import requests class HTTP: def get(self,url,return_json=True): req = requests.get(url) if return_json: return req.json() else: return req.text ~~~ 這樣顯然不夠健壯,應該加入判斷,如果請求返回`404`的時候的處理方法 ~~~python # HttpRequest.py import requests class HTTP: def get(self,url,return_json=True): req = requests.get(url) if req.status_code == 200: if return_json: return req.json() else: return req.text else : if return_json: return {} else: return '' ~~~ 這樣之后確實是邏輯上達到了要求,但是比較冗長,還可以簡短一些,并且我們并沒有用到`self`,所以可以使用`@staticemthod`裝飾成靜態方法 ~~~python # HttpRequest.py import requests class HTTP: @staticmethod def get(url,return_json=True): req = requests.get(url) if req.status_code != 200: return {} if return_json else '' return req.json() if return_json else req.text ~~~ ## 從API中獲取數據 ~~~sh ├── static #靜態資源 ├── templates ├── fisher.py ├── helper.py ├── HttpRequest.py ├── YuShu_Book.py ~~~ ~~~python #YuShu_Book.py from HttpRequest import HTTP class YuShuBook: isbn_url = 'http://t.yushu.im/v2/book/isbn/{}' keyword_url = 'http://t.yushu.im/v2/book/search?q={}&start={}&count={}' @classmethod def search_by_isbn(cls,isbn): url = cls.isbn_url.format(isbn) result = HTTP.get(url) #接收一個json數據 return result @classmethod def search_by_keyword(cls,keyword): url = cls.keyword_url.format(keyword,start=15,count=0) result = HTTP.get(url) return result ~~~ ## 重構fisher.py ~~~python from flask import Flask,jsonify from yushu_book import YuShuBook from helper import is_isbn_or_key app = Flask(__name__) @app.route('/book/search/<q>/<page>') def search(q,page): isbn_or_key = is_isbn_or_key(q) if isbn_or_key == 'isbn': result = YuShuBook.search_by_isbn(q) else: result = YuShuBook.search_by_keyword(q) return jsonify(result) # 因為Respone只允許接收字符串,元組,Response對象,使用jsonify 可以把dict處理成flask.wrappers.Response,就可以成為相應體 @app.route('/') def hello_world(): return 'Hello World!' if __name__ == '__main__': app.run() ~~~ ## 將識圖函數拆分到單獨文件中 用`BulePrint`將拆分的文件注冊到`app`上,達到拆分的效果 重構了很多東西,所以把每個包里的東西都會列出來 ~~~sh ├── app │ ├── web │ │ ├── __init_.py │ │ └── book.py │ └── __init__.py ├── static ├── templates ├── fisher.py ├── helper.py ├── HttpRequest.py ├── YuShu_Book.py ~~~ 首先把和書有關的視圖函數抽出來,注冊一個`web`藍圖到`app`上 ~~~python # web/book.py from flask import jsonify from flask import Blueprint from helper import is_isbn_or_key from yushu_book import YuShuBook web = Blueprint('web',__name__) @web.route('/book/search/<q>/<page>') def search(q,page): isbn_or_key = is_isbn_or_key(q) if isbn_or_key == 'isbn': result = YuShuBook.search_by_isbn(q) else: result = YuShuBook.search_by_keyword(q) return jsonify(result) ~~~ 然后,將`app`對象初始化重構,把實例化`flask`對象,放到`__init__`里, 然后將藍本注冊到`app`上,并且把實例化的`app`對象返回 ~~~python # app/__init__.py from flask import Flask def create_app(): app = Flask(__name__) register_blueprint(app) return app def register_blueprint(app): from app.web.book import web app.register_blueprint(web) ~~~ 主函數里調用運行`app` ~~~python #fisher.py from app import create_app app = create_app() @app.route('/') def hello_world(): return 'Hello fisher!' if __name__ == '__main__': app.run() ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看