简介

蓝图对大型项目来说是非常友好的,可以很方便的维护对应的模块

例如一个app.py文件里面包含了几十上百条路由,这些路由对应的模块是不同的,如果需要维护其中一个模块的路由,就需要在这几十上百条路由中慢慢找,如果使用了蓝图,那么直接在对应模块的蓝图中修改维护即可。



创建蓝图

创建py文件

每个蓝图都是一个单独的py文件,否则就失去了蓝图的意义

app.py同级目录下创建一个新的py文件,文件名称可以根据模块名称来定,例如需要创建的是home这个模块的蓝图,那么就创建一个home.py文件

10.png


引入Blueprint类

在新创建的py文件中引入blueprint类

from flask import Blueprint

11.png


创建蓝图

创建一个名称为home的蓝图,并为其指定静态目录

home_bp = Blueprint('home', __name__, static_folder='static/home', static_url_path='/static/home')

12.png

home_bp可以理解为一个变量名

Blueprint里面的home是蓝图名

__name__是Python 的模块名变量,代表当前模块(通常是包含该行代码的 .py 文件),Flask 利用它来确定蓝图的根目录,以便找到蓝图自己的 templates 文件夹和 static_folder。通常直接传 name 即可。

static_folder='static/home'是静态文件的实际路径,如果这个蓝图只有路由,没有静态文件(css,js等)可以不要

static_url_path='/static/home'是静态文件的访问URL前缀,通常与实际路径一致,但是注意在前面加/,如果这个蓝图没有静态文件可以不要

蓝图创建完成

蓝图创建完成后就可以在home_bp = Blueprint('home', __name__, static_folder='static/home', static_url_path='/static/home')后面写该模块的路由了

下面是一个简单的蓝图:

from flask import Blueprint, render_template

home_bp = Blueprint('home', __name__, static_folder='static/home', static_url_path='/static/home')

@home_bp.route('/')
def home():
    return render_template('index.html')

注册蓝图

蓝图创建后需要在需要调用的地方注册才能使用

例如我现在创建的home蓝图,我需要app.py运行后调用这个模块,那么我就需要在app.py里面注册蓝图

首先在文件顶部引入蓝图模块

from home import home_bp

from后面的home是模块名称,对应的是蓝图py文件的名称,home_bp是创建蓝图时候的变量

引入蓝图模块后再app = Flask(__name__)下面注册蓝图

app.register_blueprint(home_bp,url_prefix='/')

app是应用实例的名称,这个应用实例明在是子再app = Flask(__name__)的时候定义了,如果是home = Flask(__name__)的话,应用实例名称就是home,对应的,就需要把app.register_blueprint(home_bp,url_prefix='/')该成home.register_blueprint(home_bp,url_prefix='/')

register_blueprint是 Flask 应用的一个方法,用于将蓝图中定义的所有路由、静态文件配置、模板等合并到主应用中。如果不调用该方法,蓝图中定义的路由将无法访问

home_bp是蓝图模块,再创建蓝图模块的时候定义的

url_prefix='/'是蓝图访问路径,例如现在是/,那么访问ip:5000的时候就访问的是home这个蓝图,如果把/该成/home,那么想要访问这个蓝图的时候就需要访问ip:5000/home

13.png

应用对应蓝图的静态文件

在《Python-Web应用-页面组合/CSS引用》中,引用静态文件是

<link rel="stylesheet" href="{{ url_for('static', filename='style.css')}}">

这个引用的是static目录下的静态文件,如果不同模块的静态文件位置不同,每个模块都在蓝图中定义了static_folder='static/home'static_url_path='/static/home',那么就可以在static前面加上蓝图模块名称来实现不同模块使用不同的目录下的静态文件,例如:

<link rel="stylesheet" href="{{ url_for('home.static', filename='style.css')}}">

static前面加home.

15.png

二维码

发表评论