蓝图是Flask提供的一个类,其具备Flask核心对象的很多功能,最重要的就是注册路由,通过Flask的蓝图,可以把整个项目分成不同的模块并在不同的模块中增加不同的功能,可以在一个应用或跨越多个项目共用蓝图
使用蓝图可以简化大型项目的开发难度,为Flask扩展了一种在应用中注册服务的集中式机制
注意:蓝图的注册需要放到main中进行注册,否则会进行报错
from flask import Flask, render_template, url_for, flashfrom flask import request,session,g,redirectfrom Control import commic_control,comment_control,user_control,admin_controlfrom flask_sqlalchemy import SQLAlchemyfrom controller.userService import userServiceimport pymysqlapp = Flask(__name__,static_url_path='/')app.config['SECRET_KEY'] = "dsadsaffds" # 设置生成session IDapp.config['SQLALCHEMY_DATAbase_URI'] = 'mysql+pymysql://root:123456@localhost:3306/'app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = Falsedb = SQLAlchemy(app) # 实例化对象app.register_blueprint(userService)if __name__ == '__main__': app.run(debug=True,host='127.0.0.1',port=3399)
2.2 注册蓝图在controller/userService/__init__.py文件中注册蓝图
from flask import BlueprintuserService = Blueprint('userService', __name__,url_prefix="/auth")
userService:蓝图的名称,这是一个必须的参数,这里的蓝图名称就是构成视图函数 endpoint 的一部分url_prefix="/auth": 该蓝图下所有路由的前缀地址 2.3 使用
在controller/userService/auth.py文件中
from controller.userService import userService"""登陆接口"""@userService.route('/login', methods=['POST'])def login(): pass
三、应用场景 将不同的功能模块化a、一个项目可以具有多个Blueprint
b、可以将一个Blueprint注册到任何一个未使用的URL下比如 “/”、“/sample”或者子域名
c、在一个应用中,一个模块可以注册多次
d.Blueprint可以单独具有自己的模板、静态文件或者其它的通用操作方法,它并不是必须要实现应用的视图和函数的
e.在一个应用初始化时,就应该要注册需要使用的Blueprint构建大型应用优化项目结构增强可读性、易于维护