知識點: 1、藍圖
一、概況
從前面的知識點能看出來,我們所有的檢視函式都寫在了一個檔案當中,當我們的業務越來複雜的時候。檢視函式也會變得越來越多,導致閱讀不方便,維護起來困難等難題。比如下面這樣:
from flask import Flask
from flask_script import Manager
app = Flask(__name__)
@app.route('/')
def index():
return 'index page'
# home檢視
@app.route('/home')
def home():
return 'home page'
# center檢視
@app.route('/center')
def center():
return 'center page'
# order檢視
@app.route('/order')
def order():
return 'order page'
# cart檢視
@app.route('/cart')
def cart():
return 'cart page'
if __name__ == '__main__':
# 0.0.0.0代表任何能代表這臺機器的地址都可以訪問
app.run(host='0.0.0.0', port=5000, debug=True) # 執行程式
複製程式碼
能看出來,當我們業務有新的需求的時候,我們還會往這個裡面新增檢視函式。
二、使用裝飾器解決
例如我們把上面的home檢視抽出來,放到單獨的一個home.py檔案中。在此檔案只寫一個沒有被裝飾器裝飾的檢視函式。
def home():
return 'home page'
複製程式碼
然後在Flask的啟動程式檔案中,把home檢視在重新用裝飾器裝飾起來。
from flask import Flask
from home import home
app = Flask(__name__)
# 裝飾home檢視
app.route('/home')(home)
@app.route('/')
def index():
return 'index page'
if __name__ == '__main__':
# 0.0.0.0代表任何能代表這臺機器的地址都可以訪問
app.run(host='0.0.0.0', port=5000, debug=True) # 執行程式
複製程式碼
我們在瀏覽器除錯一下:
可以發現,這樣完全是可以的。其他的功能檢視也可以這麼做。但是這麼做有個缺點,就是我們去單獨home.py看的時候,根本不知道這個檢視函式對應的路徑是什麼?如果想知道,我們必須要去Flask啟動檔案中去檢視。三、藍圖
-
什麼是藍圖 Flask中的藍圖有點像Django框架的app的意思。就是把一個專案模組化,每個模組所用的檢視、靜態檔案、模板放在一個盒子裡。
-
使用藍圖 在使用藍圖之前,我們需要先建立藍圖,繼續那我們上面的home檢視函式舉例,把home.py檔案裡面的程式碼修改如下:
from flask import Blueprint
# app_home值藍圖的名稱,
# __name__指藍圖所在模組
app_home = Blueprint('app_home', __name__)
# 註冊藍圖路由
@app_home.route('/home')
def home():
return 'home page'
複製程式碼
Flask的啟動程式檔案中,匯入藍圖並註冊藍圖:
from flask import Flask
#匯入藍圖
from home import app_home
app = Flask(__name__)
# 註冊藍圖
app.register_blueprint(app_home)
@app.route('/')
def index():
return 'index page'
if __name__ == '__main__':
# 0.0.0.0代表任何能代表這臺機器的地址都可以訪問
app.run(host='0.0.0.0', port=5000, debug=True) # 執行程式
複製程式碼
我們在瀏覽器除錯一下:
我們訪問一些網站地址的時候會發現url知道,比如訪問使用者中心地址是/user/center/;比如訪問使用者資訊地址是/user/info/。這些地址有一個相同的字首。在Flask中用url_prefix可以給藍圖模組新增一個共同的地址。app.register_blueprint(app_home, url_prefix='/user')
複製程式碼
我們在瀏覽器除錯一下:
四、以藍圖模組匯入
我們還可以把Flask中的藍圖用python中包的概念管理起來。還是上面的例子,我們建立一個home資料夾(包):
那這個資料夾裡面可以就放home模組所用到的檢視函式、模板、靜態檔案等。 在__init__.py檔案中建立藍圖:from flask import Blueprint
# app_home值藍圖的名稱,
# __name__指藍圖所在模組
app_home = Blueprint('app_home', __name__)
from .views import home
複製程式碼
在views.py檔案中註冊藍圖路由:
from . import app_home
# 註冊藍圖路由
@app_home.route('/home')
def home():
return 'home page'
複製程式碼
在Flask啟動檔案匯入藍圖:
from flask import Flask
# 匯入藍圖
from home import app_home
app = Flask(__name__)
# 註冊藍圖
app.register_blueprint(app_home, url_prefix='/user')
@app.route('/')
def index():
return 'index page'
if __name__ == '__main__':
# 0.0.0.0代表任何能代表這臺機器的地址都可以訪問
app.run(host='0.0.0.0', port=5000, debug=True) # 執行程式
複製程式碼
我們在瀏覽器除錯一下:
如果想使用藍圖中自己的模板,比如我們在藍圖中建立一個模板: 必須要在建立藍圖的時候,指定模板路徑,否則會找不到模板。靜態檔案是一樣的。 我們修改一下home的檢視函式,改成載入模板:from . import app_home
from flask import render_template
# 註冊藍圖路由
@app_home.route('/home')
def home():
return render_template('home.html')
複製程式碼
我們在瀏覽器除錯一下:
溫馨提示:根及的templates大於藍圖中templates。也就是說我們把home.html移動到根及的templates,檢視函式是照樣可以找到模板的。因為是先去根及找,再去藍圖中找。歡迎關注我的公眾號: