原文:https://stackoverflow.com/questions/24420857/what-are-flask-blueprints-exactly
藍圖的漢語意思:
用感光後變成藍色或其他顏色的感光紙製成的圖紙。供工程設計施工或編繪地圖等用。(來自 http://cidian.xpcha.com/28d668gajnz.html)
顯然,人們可以根據藍圖來建造大廈,橋樑等工程建築。
回到Flask框架中,藍圖是一種模板,程序可以依據其生成“一段”web應用。其本質等同於一個模板:
開發者可以在應用的不同地方使用藍圖技術。每當你使用這個方法時,藍圖會依據應用的模板創建一個新的版本——–這就如同我們要做許多金屬工藝品(上圖右側的物品),可以先做出一個樣品的石膏模板,然後根據這個模板來澆築生成物品。
# An example
from flask import Blueprint
#生成一個藍圖,藍圖名爲mold
tree_mold = Blueprint("mold", __name__)mold
# 配置tree_mold的特定路由
def leaves():
@tree_mold.route("/leaves")
return "This tree has leaves"
@tree_mold.route("/roots")
def roots():
return "And roots as well"
@tree_mold.route("/rings")
@tree_mold.route("/rings/<int:year>")
def rings(year=None):
return "Looking at the rings for {year}".format(year=year)
這是一個簡單的樹的模板例子,任何應用可以訪問樹的葉子,根,年輪。其本身是一個模板,不可以處理路由,響應客戶端,除非註冊到一個flask應用上:
from tree_workshop import tree_mold
#註冊藍圖到app上,並設定特定的前綴
app.register_blueprint(tree_mold, url_prefix="/oak")
app.register_blueprint(tree_mold, url_prefix="/fir")
app.register_blueprint(tree_mold, url_prefix="/ash")
可以應用register_blueprint方法將tree_mold藍本註冊到flask應用上。url_prefix設置特定的藍圖的路由。
例如我們想訪問tree_mold的葉子,可以通過hostname:port/ash/leaves 來訪問。
附錄:
1.完整代碼如下:
app.py
#app.py
from tree_mold import tree_mold
from flask import Flask
from flask import Flask
app = Flask(__name__)
app.register_blueprint(tree_mold, url_prefix="/oak")
app.register_blueprint(tree_mold, url_prefix="/fir")
app.register_blueprint(tree_mold, url_prefix="/ash")
if __name__ == '__main__':
app.run()
tree_mold.py
#tree_mold.py
from flask import Blueprint
tree_mold = Blueprint("mold", __name__)
@tree_mold.route("/leaves")
def leaves():
return "This tree has leaves"
@tree_mold.route("/roots")
def roots():
return "And roots as well"
@tree_mold.route("/rings")
@tree_mold.route("/rings/<int:year>")
def rings(year=None):
return "Looking at the rings for {year}".format(year=year)
2.程序運行結果如下: