藍圖(Blueprint)

藍圖的作用是可以把一個應用拆分成多個文件勇吊,以便于大型應用的編寫集峦。

實現一個簡單的藍圖。

本例中每辟,文件目錄是這樣組織的:

/main.py  # 主函數寫在這
/routes  # 按功能拆分路由
    /todo.py
    /user.py

我們根據功能,把和 Todo 功能相關的路由函數寫到 todo.py 中干旧,把和 User 相關的路由函數寫到 user.py 中渠欺。

編寫 todo.py

from flask import (
    render_template,
    request,
    redirect,
    url_for,
    Blueprint,
)


# 創(chuàng)建一個 藍圖對象 并且路由定義在藍圖對象中
# 然后在 flask 主代碼中「注冊藍圖」來使用
# 第一個參數是藍圖的名字, 第二個參數是套路
todo_routes = Blueprint('todo', __name__)


@todo_routes.route('/')
def index():
    return 'Here is Todo!'

編寫 user.py

from flask import (
    render_template,
    request,
    redirect,
    url_for,
    Blueprint,
)


# 創(chuàng)建一個 藍圖對象 并且路由定義在藍圖對象中
# 然后在 flask 主代碼中「注冊藍圖」來使用
# 第一個參數是藍圖的名字, 第二個參數是套路
user_routes = Blueprint('user', __name__)


@user_routes.route('/')
def index():
    return 'Here is User!'

編寫 main.py

from flask import Flask

# 引入各個路由的藍圖對象
from routes.todo import todo_routes
from routes.user import user_routes


app = Flask(__name__)
# 設置 secret_key 來使用 flask 自帶的 session
# 這個字符串隨便你設置什么內容都可以
app.secret_key = 'random string'


# 注冊藍圖
# 有一個 url_prefix 可以用來給藍圖中的每個路由加一個前綴
# 比如:碰到 "/todo" 開頭的 URL,就會用 todo_routes 的函數來處理
app.register_blueprint(todo_routes, url_prefix='/todo')
app.register_blueprint(user_routes, url_prefix='/user')


# 運行代碼
if __name__ == '__main__':
    # debug 模式可以自動加載你對代碼的變動, 所以不用重啟程序
    # host 參數指定為 '0.0.0.0' 可以讓別的機器訪問你的代碼
    config = dict(
        debug=True,
        host='0.0.0.0',
        port=3000,
    )
    app.run(**config)

這時候椎眯,打開 "http://127.0.0.1:3000/todo/"挠将,“http://127.0.0.1:3000/user/”,就能見到藍圖工作了编整。

可能我們會對 Blueprint('user', __name__) 中第一個參數的作用有疑問舔稀,這類似于 Django URLs 中的 name 參數的作用。

上面例子中掌测,我們可以用 url_for('todo.index') 或者 url_for('user.index') 來找到對應方法的 URL内贮。




下面我們用藍圖來實現 Django 風格的文件目錄。

/main.py  # 主函數寫在這
/todo_app
    /__init__.py
    /models.py
    /views.py
    /templates  # 屬于 todo 的模板文件夾
        /todo_index.html
/user_app
    /__init__.py
    /models.py
    /views.py
    /templates  # 屬于 user 的模板文件夾
        /user_index.html

編寫 todo_app/views.py

from flask import (
    render_template,
    request,
    redirect,
    url_for,
    Blueprint,
)


# 創(chuàng)建一個 藍圖對象 并且路由定義在藍圖對象中
# 然后在 flask 主代碼中「注冊藍圖」來使用
# 第一個參數是藍圖的名字, 第二個參數是套路
todo_routes = Blueprint(
    'todo', 
    __name__, 
    template_folder = 'templates', # 設定模板目錄
    url_prefix='/todo' # 設定后綴 url
    )


@todo_routes.route('/')
def index():
    return render_template('todo_index.html')

編寫 user_app/views.py

from flask import (
    render_template,
    request,
    redirect,
    url_for,
    Blueprint,
)


# 創(chuàng)建一個 藍圖對象 并且路由定義在藍圖對象中
# 然后在 flask 主代碼中「注冊藍圖」來使用
# 第一個參數是藍圖的名字, 第二個參數是套路
user_routes = Blueprint(
    'user', 
    __name__, 
    template_folder = 'templates',
    url_prefix='/user'
    )


@user_routes.route('/')
def index():
    return render_template('user_index.html')

編寫 main.py

from flask import Flask

# 引入各個路由的藍圖對象
from todo_app.views import todo_routes
from user_app.views import user_routes


app = Flask(__name__)
# 設置 secret_key 來使用 flask 自帶的 session
# 這個字符串隨便你設置什么內容都可以
app.secret_key = 'random string'


# 注冊藍圖
app.register_blueprint(todo_routes)
app.register_blueprint(user_routes)


# 運行代碼
if __name__ == '__main__':
    config = dict(
        debug=True,
        host='0.0.0.0',
        port=3000,
    )
    app.run(**config)

本例子的代碼:https://github.com/SingleDiego/Flask-Blueprint-Demo

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末汞斧,一起剝皮案震驚了整個濱河市夜郁,隨后出現的幾起案子,更是在濱河造成了極大的恐慌粘勒,老刑警劉巖竞端,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異庙睡,居然都是意外死亡事富,警方通過查閱死者的電腦和手機技俐,發(fā)現死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赵颅,“玉大人虽另,你說我怎么就攤上這事〗让” “怎么了捂刺?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長募寨。 經常有香客問我族展,道長,這世上最難降的妖魔是什么拔鹰? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任仪缸,我火速辦了婚禮,結果婚禮上列肢,老公的妹妹穿的比我還像新娘恰画。我一直安慰自己,他們只是感情好瓷马,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布拴还。 她就那樣靜靜地躺著,像睡著了一般欧聘。 火紅的嫁衣襯著肌膚如雪片林。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天怀骤,我揣著相機與錄音费封,去河邊找鬼。 笑死蒋伦,一個胖子當著我的面吹牛弓摘,可吹牛的內容都是我干的。 我是一名探鬼主播凉敲,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼衣盾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了爷抓?” 一聲冷哼從身側響起势决,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蓝撇,沒想到半個月后果复,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡渤昌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年虽抄,在試婚紗的時候發(fā)現自己被綠了走搁。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡迈窟,死狀恐怖私植,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情车酣,我是刑警寧澤曲稼,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站湖员,受9級特大地震影響贫悄,放射性物質發(fā)生泄漏。R本人自食惡果不足惜娘摔,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一窄坦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧凳寺,春花似錦鸭津、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至怜瞒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間般哼,已是汗流浹背吴汪。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蒸眠,地道東北人漾橙。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像楞卡,于是被迫代替她去往敵國和親霜运。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內容

  • Flask藍圖提供了模塊化管理程序路由的功能蒋腮,使程序結構清晰淘捡、簡單易懂。下面分析藍圖的使用方法 假如說我們要為某所...
    楓林夕陽閱讀 27,142評論 3 13
  • 隨著功能的添加池摧,路由越來越多焦除,view層的拆分變成了剛需 方式 模塊Module 藍圖Blueprint 實現 M...
    SkyWatcher閱讀 6,852評論 0 4
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發(fā)現作彤,斷路器膘魄,智...
    卡卡羅2017閱讀 134,672評論 18 139
  • 22年12月更新:個人網站關停,如果仍舊對舊教程有興趣參考 Github 的markdown內容[https://...
    tangyefei閱讀 35,184評論 22 257
  • git的日常操作流workflow 先看git的三個’階段’ working tree/working direc...
    文千會閱讀 327評論 0 1