Flask 之一藍圖Blueprint詳解
阿新 • • 發佈:2021-01-26
一、藍圖概述
藍圖:是flask提供的一種應用程式組織化的方法,類似的django的app,把不同功能分到不同檔案,最後將這些檔案彙總起來。
本質:將不同處理功能的程式碼分開放,再將這些程式碼註冊到藍圖上,最後將藍圖註冊到應用程式。
二、藍圖的理解和應用
案例專案結構目錄如下:
"""
├── flask_blue
├── templates/ # 模版資料夾
├── static/ # 靜態資料夾
├── apps/ # app應用程式包
├── admin_app/ # 後臺管理功能程式 -
├── __init__.py
└── admin.py # 程式碼檔案
├── login_app/ # 登陸功能程式
├── __init__.py
└── login.py # 程式碼檔案
└── manage.py # 主程式,類似Django的主路由
"""
1、各個app下的程式程式碼如下
admin.py檔案程式碼如下
from flask import Blueprint #匯入藍圖模組
# Blueprint兩個引數('藍圖名字',藍圖所在位置',url字首),注意:url字首對該藍圖下所有route都起作用
admin_blue = Blueprint('admin',__name__,url_prefix='/admin') #建立一個藍圖
@admin_blue.route('/') #該路由連結變成 /admin/
def admin():
return '後臺管理介面'
admin_app初始化檔案__init__.py
from apps.admin_app.admin import admin_blue
# 方便使用,主程式使用時,就可以直接包名.admin_blue
login.py檔案如下:
from flask import Blueprint # 匯入藍圖模組
# Blueprint兩個引數('藍圖名字',藍圖所在位置')
login_blue = Blueprint('login', __name__)
@login_blue.route('/login')
def admin():
return '登陸介面'
2、apps包的初始檔案__init__.py
from flask import Flask
# 匯入藍圖
from apps.admin_app import admin_blue
from apps.login_app import login_blue
app = Flask(__name__)
app.register_blueprint(admin_blue) #將藍圖註冊到app中
app.register_blueprint(login_blue)
3、manage.py檔案(主程式)
# 從apps包中匯入app
from apps import app
if __name__ == '__main__':
app.run()
在瀏覽器訪問結果如下:
三、藍圖的其他用法
1、static_folder:設定藍圖的靜態目錄
# 設定靜態目錄
login_blue = Blueprint('login', __name__,static_folder='static_login')
# 訪問該藍圖的靜態目錄,就可以通過路徑/static_login/靜態目錄下的檔名
# 例子:http://127.0.0.1:5000/static_login/11.jpg
# 如果藍圖註冊的時候設定了url_prefix,則為 url_prefix/static_login/
# 例子:http://127.0.0.1:5000/login/static_login/11.jpg
2、更改靜態目錄的路徑(url)名稱
login_blue = Blueprint('login', __name__,static_folder='static_login',static_url_path='/s')
'''
靜態檔案目錄路徑將有/static_login變成/s
http://127.0.0.1:5000/static_login/11.jpg # 訪問不了
http://127.0.0.1:5000/s/11.jpg # 可以訪問
'''
3、設定藍圖自己的模板檔案目錄template_folder
login_blue = Blueprint('login', __name__,template_folder='template')
@login_blue.route('/login')
def admin():
return render_template('index.html')
'''
藍圖會從自己的template目錄下找模板檔案,找不到再去全域性的templates目錄中找
'''