Flask框架從入門到精通之藍圖(二十四)

知識點: 一、藍圖html

1、概況

從前面的知識點能看出來,咱們全部的視圖函數都寫在了一個文件當中,當咱們的業務越來複雜的時候。視圖函數也會變得愈來愈多,致使閱讀不方便,維護起來困難等難題。好比下面這樣:python

from flask import Flask
from flask_script import Manager

app = Flask(__name__)


@app.route('/')
def index():
    return 'index page'

# home視圖
@app.route('/home')
def home():
    return 'home page'

# center視圖
@app.route('/center')
def center():
    return 'center page'

# order視圖
@app.route('/order')
def order():
    return 'order page'

# cart視圖
@app.route('/cart')
def cart():
    return 'cart page'


if __name__ == '__main__':
    # 0.0.0.0表明任何能表明這臺機器的地址均可以訪問
    app.run(host='0.0.0.0', port=5000, debug=True)  # 運行程序

複製代碼

能看出來,當咱們業務有新的需求的時候,咱們還會往這個裏面添加視圖函數。flask

2、使用裝飾器解決

例如咱們把上面的home視圖抽出來,放到單獨的一個home.py文件中。在此文件只寫一個沒有被裝飾器裝飾的視圖函數。瀏覽器

def home():
    return 'home page'
複製代碼

而後在Flask的啓動程序文件中,把home視圖在從新用裝飾器裝飾起來。app

from flask import Flask
from home import home

app = Flask(__name__)

# 裝飾home視圖
app.route('/home')(home)


@app.route('/')
def index():
    return 'index page'


if __name__ == '__main__':
    # 0.0.0.0表明任何能表明這臺機器的地址均可以訪問
    app.run(host='0.0.0.0', port=5000, debug=True)  # 運行程序

複製代碼

咱們在瀏覽器調試一下: 框架

在這裏插入圖片描述
能夠發現,這樣徹底是能夠的。其餘的功能視圖也能夠這麼作。可是這麼作有個缺點,就是咱們去單獨home.py看的時候,根本不知道這個視圖函數對應的路徑是什麼?若是想知道,咱們必需要去Flask啓動文件中去查看。

3、藍圖

  • 什麼是藍圖 Flask中的藍圖有點像Django框架的app的意思。就是把一個項目模塊化,每一個模塊所用的視圖、靜態文件、模板放在一個盒子裏。模塊化

  • 使用藍圖 在使用藍圖以前,咱們須要先建立藍圖,繼續那咱們上面的home視圖函數舉例,把home.py文件裏面的代碼修改以下:函數

from flask import Blueprint

# app_home值藍圖的名稱,
# __name__指藍圖所在模塊
app_home = Blueprint('app_home', __name__)


# 註冊藍圖路由
@app_home.route('/home')
def home():
    return 'home page'

複製代碼

Flask的啓動程序文件中,導入藍圖並註冊藍圖:網站

from flask import Flask
#導入藍圖
from home import app_home

app = Flask(__name__)


# 註冊藍圖
app.register_blueprint(app_home)


@app.route('/')
def index():
    return 'index page'


if __name__ == '__main__':
    # 0.0.0.0表明任何能表明這臺機器的地址均可以訪問
    app.run(host='0.0.0.0', port=5000, debug=True)  # 運行程序

複製代碼

咱們在瀏覽器調試一下: url

在這裏插入圖片描述
咱們訪問一些網站地址的時候會發現url知道,好比訪問用戶中心地址是/user/center/;好比訪問用戶信息地址是/user/info/。這些地址有一個相同的前綴。在Flask中用url_prefix能夠給藍圖模塊添加一個共同的地址。

app.register_blueprint(app_home, url_prefix='/user')
複製代碼

咱們在瀏覽器調試一下:

在這裏插入圖片描述

4、以藍圖模塊導入

咱們還能夠把Flask中的藍圖用python中包的概念管理起來。仍是上面的例子,咱們建立一個home文件夾(包):

在這裏插入圖片描述
那這個文件夾裏面能夠就放home模塊所用到的視圖函數、模板、靜態文件等。 在__init__.py文件中建立藍圖:

from flask import Blueprint

# app_home值藍圖的名稱,
# __name__指藍圖所在模塊
app_home = Blueprint('app_home', __name__)

from .views import home

複製代碼

在views.py文件中註冊藍圖路由:

from . import app_home


# 註冊藍圖路由
@app_home.route('/home')
def home():
    return 'home page'

複製代碼

在Flask啓動文件導入藍圖:

from flask import Flask
# 導入藍圖
from home import app_home

app = Flask(__name__)

# 註冊藍圖
app.register_blueprint(app_home, url_prefix='/user')


@app.route('/')
def index():
    return 'index page'


if __name__ == '__main__':
    # 0.0.0.0表明任何能表明這臺機器的地址均可以訪問
    app.run(host='0.0.0.0', port=5000, debug=True)  # 運行程序

複製代碼

咱們在瀏覽器調試一下:

在這裏插入圖片描述
若是想使用藍圖中本身的模板,好比咱們在藍圖中建立一個模板:
在這裏插入圖片描述
必需要在建立藍圖的時候,指定模板路徑,不然會找不到模板。靜態文件是同樣的。
在這裏插入圖片描述
咱們修改一下home的視圖函數,改爲加載模板:

from . import app_home
from flask import render_template


# 註冊藍圖路由
@app_home.route('/home')
def home():
    return render_template('home.html')

複製代碼

咱們在瀏覽器調試一下:

在這裏插入圖片描述
舒適提示:根及的templates大於藍圖中templates。也就是說咱們把home.html移動到根及的templates,視圖函數是照樣能夠找到模板的。由於是先去根及找,再去藍圖中找。
在這裏插入圖片描述

歡迎關注個人公衆號:

image
相關文章
相關標籤/搜索