1. 程式人生 > 其它 >Flask 之一藍圖Blueprint詳解

Flask 之一藍圖Blueprint詳解

技術標籤:flaskpython

一、藍圖概述

藍圖:是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目錄中找
'''