聊聊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的。