1.概念
将视图方法模块化,既当大量的视图函数放在一个文件中,很明显是不合适,最好的方案是根据功能将路由合理的划分到不同的文件中;而蓝本就是为了解决这个问题而出现的。
2.使用
2.1 导入库类
from flask import Blueprint
2.2 创建对象
user = Blueprint('user', __name__, url_prefix='/user')
mian=Blueprint("main",__name__)
2.3在user.py中添加视图函数
from flask import Blueprint,render——template
#蓝本
main=Blueprint("main",__name__)
#添加视图函数
@mian.route('/')
def mianinfo:
return render_template("main.html")
2.4在manager.py中的程序:
from flask_script import Manager
from flask_migrate import MigrateCommand
from App import create_app
#创建对象
app = create_app()
manager = Manager(app)
manager.add_command("db",MigrateCommand)
if __name__ == "__main__":
manager.run()
2.5在__init__.py中注册蓝本:
from flask import Flask
from App.config import configDict
from App.extensions import init_app
from App.views import register_blueprint
def create_app(configName = "default"):
app = Flask(__name__)
# 加载配置文件内容
app.config.from_object(configDict[configName])
# 注册蓝本
register_blueprint(app)
# 初始化扩展库
init_app(app)
return app
我们在实际程序编写过程中,不可能在一个py文件中放入多个路由,这样不仅占用过多存储空间,而且也不方便维护。如果py文件报错,那么代码无法继续写下去。
所以引入蓝本(Blueprint)。简单来说,Blueprint 是一个存储操作方法的容器,这些操作在这个Blueprint 被注册到一个应用之后就可以被调用,Flask 可以通过Blueprint来组织URL以及处理请求。
Flask使用Blueprint让应用实现模块化,在Flask中,Blueprint具有如下属性:
- 一个应用可以具有多个Blueprint
- 可以将一个Blueprint注册到任何一个未使用的URL下比如 “/”、“/sample”或者子域名
- 在一个应用中,一个模块可以注册多次
- Blueprint可以单独具有自己的模板、静态文件或者其它的通用操作方法,它并不是必须要实现应用的视图和函数的
- 在一个应用初始化时,就应该要注册需要使用的Blueprint
但是一个Blueprint并不是一个完整的应用,它不能独立于应用运行,而必须要注册到某一个应用中。