iT邦幫忙

1

伸縮自如的Flask [day2] blue_print

開始之前,我相信你已經有碰過flask的經驗,或是至少知道藉由

pip install Flask

來進行安裝。

要提到blue_print,首先要提到為甚麼我們要使用他。
當你的網頁功能很多,已經超過了30個路由功能擠在了你的app.py。
你的app.py 寫了超過500行的程式碼,這時候你的PM或是你的客戶跑來跟你說我的某個功能要改一下,而且我也不想付你半毛錢。

這時候你的頭腦開始高速運轉並且燒了起來,這個該死的功能到底在app.py的第幾行呢?
你不知道,直到從大大的口中得知了blue_print的存在。

你的生活出現了改變,至少是你的flask程式碼的品質出現了改變。
你可以把許多功能分門別類寫在不同的py檔,並且能從他們的名子中知道哪些功能在那裡了。

https://github.com/wilsonsujames/bule_print

你可以把上面的repository 自己git clone下來,也可以按右上角綠色的Code按鈕來download zip,或是自己寫一個。
你從bule_print-main進到blueprint_test並且看到了main.py,也執行了main.py。

你看見了寫在main.py的根路由 return了什麼:https://ithelp.ithome.com.tw/upload/images/20210508/20122678ESrPWWyGPw.png

接著你到達manu1,可以看到:
https://ithelp.ithome.com.tw/upload/images/20210508/20122678BIL8eg3dSb.png

沒錯你只要要在其他的py檔中這樣寫:

from flask import Blueprint

testRoute = Blueprint('testRoute', __name__)

@testRoute.route('/manu1')  #  路由拿掉剛才標上的生產
def testroute():
    return '<h1>You win!</h1>'

並且在主程式(目前是main.py)進行引用及註冊:

from view.api import testRoute
app.register_blueprint(testRoute, url_prefix='')

你現在可以在好幾個資料夾寫好幾個py檔,而且你也可以依據他們的名稱快速找到哪一個功能在那裡。
至於要不要用url_prefix來讓你該blue print都帶有一樣的前綴,這可以看個人喜好。

注意:
在寫HTML的時候,假設用到了jinja及url_for並且前往其中一個blueprint的路由時。
請這樣寫:

 <a href="{{ url_for('testRoute.testroute') }}">To manu1</a>

其中testRoute為該blueprint的變數名稱,testroute為該Route的function名子。
我想第二天就先這樣,晚上就看個世界大賽。


1 則留言

0
jiamingla
iT邦新手 5 級 ‧ 2021-05-12 20:32:48

我在閱讀flask作者寫的第二本flask書籍時,真的不知道藍圖可以拿來做什麼
謝謝你解釋得很清楚

我要留言

立即登入留言