一、基本概念
蓝图将不同的功能放到不同的模块中,以实现程序功能的模块化。其本质上来说就是让程序更加松耦合,更加灵活,增加复用性。
一个项目可以有多个蓝图。
优点:
1、工程结构更加清晰,便于开发和维护
2、降低了代码的耦合,代码更加健壮。
二、使用步骤
1、导入蓝图库类(位置:视图函数文件)
from flask import Blueprint
#重要:注意导入的方法名为Blueprint,不是blueprints,虽然import无异常
2、创建(实例化)蓝图对象(位置:视图函数文件)
us=Blueprint('user',__name__)
#两个必要参数':第一个参数:蓝图名字,自定义,随意;' 第二个参数:__name__'蓝图所在的模块或者包,一般为'__name__'变量
3、使用蓝图对象进行路由操作(位置:视图函数文件)
@us.route('/account')
def user_profile():
return 'user_profile' #返回字符串
或
return render_template('hello.html') #返回渲染的HTML页面
4、注册蓝图(位置:项目初始化__init__文件)
注册蓝图:将对应模块下的蓝图对象注册到app中
from flask import Flask
app = Flask(__name__)
from .modelViews001.user import us #引入视图中创建的蓝图对象 .表示当前文件所在目录层级
app.register_blueprint(us) #注册蓝图
三、蓝图参数:url_prefix(非必填),用来调整url地址
当需要用到的时候,一般在蓝图对象定义时添加,为当前蓝图下所有视图函数添加统一的前缀,这样不同蓝图下的视图函数url就不易发生重复;如
xxx = Blueprint(‘account’, name,url_prefix=‘/xxx’)
在创建蓝图实例化对象时候,如果加上参数url_prefix=‘/xxx’,表示在该蓝图下,所有的url地址访问路径中都要加上xxx路径,即域名/xxx/路由
如:
# 导入蓝图
from flask import Blueprint
blueprint = Blueprint('news', __name__, url_prefix="/news")
# 用蓝图注册路由
@blueprint.route("/society")
def society_news():
return "aaaa"
@blueprint.route("/tech")
def tech_news():
return "bbbb"
因为蓝图的url_prefix设置为news,页面访问的路径是 http://域名/news/society 和http://域名/news/tech
完整demo如下:
from flask import Flask, render_template,Blueprint
#form = Blueprint('formDis', __name__)
form = Blueprint('formDis111', __name__, url_prefix="/news")
#实例化蓝图对象
#两个必要参数':
# 第一个参数:蓝图名字,自定义'
# 第二个参数:__name__'蓝图所在的模块或者包,一般为'__name__'变量;
# 第三个参数:url_prefix,非必填,,表示在该蓝图下,所有的url地址访问路径中都要加上xxx路径,即域名/xxx/路由
@form.route('/formplay') #在蓝图对象上进行操作,路由
def index():
# 往模板中传入的数据
my_str11 = 'Hello Word22'
my_int = 10
my_array = [3, 4, 2, 1, 7, 9]
my_dict = {
'name': 'xiaoming',
'age': 18
}
return render_template('hello.html',
my_str22=my_str11,
my_int=my_int,
my_array=my_array,
my_dict=my_dict
)
四、注意事项
1、一个app下的蓝图对象不可重名