在进行项目开发的过程中,如果我们把所有的视图函数都写在一个app.py主程序中,非常的不利于后期的维护和管理,我们需要将不同的app分配不同的处理功能,然后共同在组成一个完整的项目。
蓝图(Blueprint)就相当于一个一个的热拔插模块,Blueprint 是一个存储视图方法的容器,这些操作在这个Blueprint 被注册到一个应用之后就可以被调用,Flask可以通过Blueprint来组织URL以及处理请求。
蓝图Blueprint的生成和注册
- 新建flask项目并创建对应文件夹
首先我们新建一个flask项目,并在项目下新建两个目录bluepring_static、blueprint_templates,然后在blueprint_templates新建蓝图文件add_book.py
- 创建蓝图文件add_book.py
– add_book.py
# 导入Blueprint
from flask import Blueprint
# 生成蓝图
add_book = Blueprint('blueprint_add_book', __name__)
# 生成蓝图路由以及视图函数
@add_book.route('/addbook')
def add_b():
return '你好,这是add_book页面'
- 将蓝图注册到app.py中
from flask import Flas
# 导入蓝图
from blueprint.add_book import add_book
app = Flask(__name__)
# 注册蓝图
app.register_blueprint(add_book)
@app.route('/', endpoint='index')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run(debug=True)
运行程序,查看add_book的效果:
实现了一个简单的热拔插效果,试想一下,如果有成百上千个函数呢,代码变得简洁了许多,app是不是变得易看、方便管理很多?
蓝图中对应相关参数的引用
- 新建一个蓝图add_movie.py
# 导入Blueprint
from flask import Blueprint, render_template
# 生成蓝图
add_movie = Blueprint('blueprint_add_movie', __name__,
template_folder='blueprint_templates', # 指定模板路径
static_url_path='/bp_static', # 指定静态文件的加载路由,可以不是实际存在的目录
static_folder='blueprint_static') # 静态文件存放路径,必须存在
# 生成蓝图路由以及视图函数
@add_movie.route('/addmovie')
def add_m():
return render_template('add_movie.html')
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>这是添加电影页面</title>
</head>
<body>
<h1>这是添加电影页面</h1>
{# 对应蓝图中static_url_path='/bp_static'路径,static_folder='blueprint_static'的下面有一张图片shuai.png#}
<img src="/bp_static/shuai.png">
</body>
</html>
- 注册add_movie到app中
# 导入蓝图
from blueprint.add_movie import add_movie
# 注册蓝图
app.register_blueprint(add_movie)
执行程序查看效果: