Flask 系列之 Blueprint
說明
- 操作系統:Windows 10
- Python 版本:3.7x
- 虛擬環境管理器:virtualenv
- 代碼編輯器:VS Code
實驗目標
學習如何使用 Blueprint
介紹
接觸過 DotNet MVC 開發的朋友應該都對 路由 的概念有一定的了解。所謂 路由 就是指我們訪問一個網站時,這個網站各個頁面訪問時對應的 URL 地址。在我們的網站不是很復雜時,我們可以使用最原始的方法來設計路由,但是對待一個大型項目如果我們的路由不能進行統一管理和配置的話,那么對于項目后期來說,是無法維護的。
對于 Flask 來說,當我們的項目達到一定級別的話,可以嘗試將我們的項目進行模塊化設計,那么對應的路由我們也應該通過某種方式來進行統一管理和配置,這個時候就可以使用 Blueprint 來解決。
Blueprint 中文叫 藍圖,其作用是用于路由的模塊化配置與管理。其常用參數如下圖所示:
其中常用的幾個參數為:
- name: 藍圖名稱;
- import_name:導入的名稱,使用 name 即可;
- url_prefix:藍圖的訪問前綴;
使用
打開 Windows Cmd,執行下述操作:
mkdir flask_bppython -m viratulenv venvvenv\Scripts\activatepip install flaskcode .執行完畢后,VS Code 會自動加載該目錄并啟動起來,我們嘗試創建一個最簡單的示例程序看一下效果,組織一下我們的項目代碼,如下圖所示:
我們創建了一個項目名為 app 的模塊,這個模塊作為我們的項目根目錄,然后在里面創建了一個 home 子模塊,這個模塊我們作為我們網站的一個子站點,然后會被注冊到主程序中。
定義
app\home ?init.py 的示例代碼如下所示:
from flask import Blueprintbp = Blueprint('home', __name__)from . import views使用
app\home\views.py 的示例代碼如下所示:
from flask import render_template from . import bp@bp.route('/index') @bp.route('/') def index():msg = '我是來至模塊 home 的視圖函數'return render_template('home/index.html', msg=msg)添加頁面
app\templates\base.html 的示例代碼如下所示:
<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Flask-bp</title> </head><body>{% block content %}{% endblock %} </body></html>app\templates\home\index.html 的示例代碼如下所示:
{% extends 'base.html' %} {% block content %} <center><h1>{{msg}}</h1> </center> {% endblock %}注冊
**app__init__.py** 的示例代碼如下所示:
from flask import Flask from .home import bp as home_bpapp = Flask(__name__)app.register_blueprint(home_bp, url__prefix='/')添加啟動函數
manage.py 的示例代碼如下所示:
from app import appif __name__ == "__main__":app.run(debug=True)修改完畢后,嘗試在當前虛擬環境中執行 flask run 來運行我們的程序,會出現如下圖所示的界面:
需要補充的一點是,如果我們在 HTML 中訪問某個模塊的視圖函數,可以通過 modulename.routename 方式,在上述的示例中,如果我們想訪問到 home 模塊中 的 “Index” 路由,那么可以通過 home.index 方式即可。
總結
Blueprint 支持多種配置方式,包括當前模塊的路由規則,靜態資源的訪問位置。需要說明的一點時,由于我們引入了模塊化的編程方式,所有可能存在模塊與模塊之間循環引入的問題,如果出現這種情況的話,我們的某些自定義模塊就無法成功導入,這個時候我們可以嘗試在某一函數段進行局部導入,這樣就可以了。
相關參考
- 用藍圖實現模塊化的應用
轉載于:https://www.cnblogs.com/hippieZhou/p/10664408.html
總結
以上是生活随笔為你收集整理的Flask 系列之 Blueprint的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构(python语言)目录链接
- 下一篇: [Alpha阶段]第六次Scrum Me