<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ## 單藍圖多模塊拆分視圖函數 上一篇后成功將藍圖注冊到`app`上,但是有一個問題是要實現的是單藍圖多模塊拆分視圖函數,這樣肯定是不行的,所以我們將藍圖注冊到`web`下的`__init__.py`下,然后將之前的`book`導入,這樣以后有新的模塊,只需要在`__init__`下導入就可以注冊到`web`這個藍圖下了 ~~~python from flask import Blueprint web = Blueprint('web', __name__) from app.web import book ~~~ 修改`book.py`內容 ~~~python from flask import jsonify from . import web from helper import is_isbn_or_key from yushu_book import YuShuBook @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) ~~~ ## 將q和page作為get請求傳參 ~~~sh ├── app │ ├──forms │ │ └── BookForm.py │ ├── web │ │ ├── __init_.py │ │ ├── book.py │ │ ├── setting.py │ │ └── secure.py │ └── __init__.py ├── static ├── templates ├── fisher.py ├── helper.py ├── HttpRequest.py ├── YuShu_Book.py ~~~ 首先我們新建兩個配置文件`setting.py`和`secure.py`。 `setting`用于存放一般的配置,如后面用到的`PRE_PAGE` `secure`用于存放機密配置,如數據庫信息等 `forms`文件夾用于存放所有表單驗證模塊 將`secure.py`,`setting.py`注冊到`app`上 ~~~python #app/__init__.py from flask import Flask from app.models.sql_book import db def create_app(): app = Flask(__name__) app.config.from_object('app.secure') app.config.from_object('app.setting') register_blueprint(app) return app def register_blueprint(app): from app.web import web app.register_blueprint(web) ~~~ form get參數驗證 ~~~python #BookForm.py from wtforms import Form,StringField,IntegerField from wtforms.validators import Length, NumberRange,DataRequired class SearchForm(Form): q = StringField(validators=[Length(min=1,max=30),DataRequired()]) #DataRequired()方法要求用戶必須輸入,且不能為空格 page = IntegerField(validators=[NumberRange(min=1,max=99)],default=1) #設置了page的默認值,如果不穿page參數,則取1 ~~~ 將驗證模塊導入`book`模塊中,并且講拼接到路徑中的`page`和`q`都改成`get`請求方式 ~~~python from flask import jsonify,request from . import web from app.forms.BookForm import SearchForm from helper import is_isbn_or_key from yushu_book import YuShuBook @web.route('/book/search') def search(): form = SearchForm(request.args) if form.validate(): #使用驗證其驗證 q = form.q.data.strip() page = form.page.data 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,page) #這里添加了page參數 print(q) return jsonify(result) else: #flask種每個條件下必須有返回否則會報錯 return jsonify({'msg':'參數校驗失敗'}) ~~~ 重構`yushu_book.py` ~~~python from HttpRequest import HTTP from flask import current_app 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) return result @classmethod def search_by_keyword(cls,keyword,page=1): url = cls.keyword_url.format(keyword,cls.get_start_page(page),current_app.config['PRE_PAGE']) result = HTTP.get(url) return result @staticmethod def get_start_page(page): return (page-1) * current_app.config['PRE_PAGE'] #從第0頁開始 ~~~ 到此就可以完成基本的`isbn`請求獲取數據和`關鍵字`請求獲取參數 ## 測試 `isbn:http://127.0.0.1:5000/book/search?q=9787501524044` [![](https://oss.miaoroom.com/wp-content/uploads/2019/02/ys_book_isbn.png)](https://oss.miaoroom.com/wp-content/uploads/2019/02/ys_book_isbn.png) `keyword:http://127.0.0.1:5000/book/search?q=郭敬明` [![](https://oss.miaoroom.com/wp-content/uploads/2019/02/ys_book_keyword.png)](https://oss.miaoroom.com/wp-content/uploads/2019/02/ys_book_keyword.png) ## 模塊分類 在`app`文件夾下創建三個新的文件夾`spider`,`models`和`libs` 將對應的模塊放入相應的文件夾下,新目錄結構如下 ~~~sh ├── app │ ├──forms │ │ └── BookForm.py │ ├── web │ │ ├── __init_.py │ │ ├── book.py │ │ ├── setting.py │ │ └── secure.py │ ├──libs │ │ ├── helper.py │ │ └── HttpRequest.py │ ├──spider │ │ └── yushu_book.py │ ├──models │ │ └── sql_book.py │ └── __init__.py ├── static ├── templates ├── fisher.py ~~~ ## 數據庫操作 在`sql_book.py`下創建數據庫模型 ~~~python from sqlalchemy import Column,Integer,String from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() class Book(db.Model): id = Column(Integer,primary_key=True,autoincrement=True) title = Column(String(50),nullable=False) author = Column(String(30),default='未名') binding = Column(String(20)) publisher = Column(String(50)) price = Column(String(20)) pages = Column(Integer) pubdate = Column(String(20)) isbn = Column(String(15),nullable=False,unique=True) summary = Column(String(1000)) image = Column(String(50)) ~~~ 在`secure.py`下添加數據庫連接配置 ~~~python SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:root@localhost:3306/fisher' SQLALCHEMY_TRACK_MODIFICATIONS = True ~~~ 然后將 `db`注冊到`app`中 ~~~python #app/__init__.py from flask import Flask from app.models.sql_book import db def create_app(): app = Flask(__name__) app.config.from_object('app.secure') app.config.from_object('app.setting') register_blueprint(app) db.init_app(app) db.create_all(app=app) return app def register_blueprint(app): from app.web import web app.register_blueprint(web) ~~~ 執行`app`后就可以在`fisher`中看到`book`表
                  <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>

                              哎呀哎呀视频在线观看