1. 程式人生 > >聊聊Flask的專案結構(一)——怎麼使用藍圖使專案程式碼模組化

聊聊Flask的專案結構(一)——怎麼使用藍圖使專案程式碼模組化

.idea資料夾是Pycharm IDE的快取檔案,這個是我推薦大家使用的IDE

manage.py 是啟動服務的檔案,之前我們也把檢視路由放在這個檔案中,這在實戰中是不推薦的,因為如果我們有很多個頁面的話,單個manage.py檔案都會非常的大,管理和維護起來非常的不方便。

因此我們需要把檢視路由獨立開來(就是@app.route(“/”)那一部分),在這個時候使用藍圖(blueprint)來劃分我們不同的功能模組就顯得非常的重要。

什麼是藍圖(blueprint)

知乎的答案已經很詳細啦,其實簡而言之呢就是在同一個app內實現程式碼的模組化,不同的功能可以封裝成不同的Package,管理起來方便的多(有點類似django的app)。

首先我們新建一個名為weixin的python package,然後再在weixin資料夾中新建一個名為admin的python package

在Pycharm中新建的Python Package資料夾下預設有一個init.py的檔案,到時我們例項化整個Flask應用,藍圖各個模組的藍圖物件就是在這些檔案。

首先我們先在weixin資料夾的根目錄下的init.py檔案中建立Flask物件(就是將原先寫在manage.py中的程式碼搬到這裡)。即:

weixin/init.py 第一部分程式碼

from flask import Flask

建立一個flask物件

app 
= Flask(__name__)

接下來我們在weixin下的admin資料夾(即假設我們要開發管理員後臺的程式碼資料夾)中的init.py中建立一個藍圖物件

weixin/admin/init.py

引入blueprint

from flask import Blueprint

建立一個blueprint物件

admin = Blueprint("admin",__name__)

引入檢視檔案(這裡要在admin下建立一個views.py的檔案),記得,引入views檢視檔案一定要在建立藍圖物件的之後

from . import views

對from import的語法不熟悉的朋友建議先熟悉下python先

接下來就要回到weixin下的init.py下注冊我們剛才建立的這個admin的藍圖物件了。

weixin/init.py 第二部分程式碼

從admin包中引入admin並將其賦值給admin_blueprint

from .admin import admin as admin_blueprint

註冊藍圖

app.register_blueprint(admin_blueprint, url_prefix='/admin')

register_blueprint是註冊藍圖的方法,url_prefix是訪問這個藍圖根目錄的連結字首

,像這裡把admin作為連結的字首,那麼要訪問admin檢視檔案的根目錄的話就是

www.abc.com/admin

接下來我們在檢視檔案中簡單的寫一個helloworld的根目錄檢視函式

weixin/admin/views.py

from . import admin

@admin.route("/")

def index():

    return "Hello World!"

在這裡要用admin.route而不是app.route,要注意(即對應藍圖的名稱)。

然後manage.py檔案修改後如下所示

from weixin import app

if __name__ == "__main__":

    app.run(debug=True)

接下來在cmd中執行整個應用

python manage.py

就可以看到藍圖註冊成功,訪問admin時會顯示admin下的檢視函式。

其實整個藍圖的功能就這麼簡單,當然如果你不喜歡使用也沒關係,但是整個專案到達一定的程度時,使用藍圖會是的檢視檔案的管理變得相對簡單,各藍圖需要引用的其他模組都可以獨立開來,所以的小編我個人的建議是最好還是使用這個藍圖。

如無意外的化明天應該會講一下Flask專案結構中靜態檔案的管理,有這方面需求的朋友可以繼續關注哦!

最後附上這次的原始碼,其中的venv檔案請先刪除後再根據自己的環境重新建立,目測本次的原始碼應該還是相容Python2的。