Blueprint
一. 什么是蓝图
当你的项目有很多模块时,放在一起的话,既不方便查看,耦合度又太高。所以Flask提供了蓝图(Blueprint)功能。蓝图使用起来就像应用当中的子应用一样,可以有自己的模板,静态目录,有自己的视图函数和URL规则,蓝图之间互相不影响。但是它们又属于应用中,可以共享应用的配置。对于大型应用来说,我们可以通过添加蓝图来扩展应用功能,而不至于影响原来的程序。不过有一点要注意,目前Flask蓝图的注册是静态的,不支持可插拔。
二. 初识蓝图
蓝图/Blueprint对象用起来和一个应用Flask对象差不多,最大的区别在于一个 蓝图对象没有办法独立运行,必须将它注册到一个应用对象上才能生效
使用蓝图可以分为三个步骤
- 导入蓝图模块, 创建蓝图对象
news_blue=Blueprint('news',__name__)
- 使用创建的蓝图对象实现路由
@admin.route('/news_blue')
def news_blue():
return 'news_blue'
- 在应用对象上注册这个蓝图对象
app.register_blueprint(news_blue)
当这个应用启动后,通过/news/可以访问到蓝图中定义的视图函数
三. 目录模块形式
通常在开发项目中,路由需要拆分到一些目录模块中,每个模块内可以拥有独立的模板文件夹、静态文件夹等.此时写法需要略微调整.仍然是蓝图的三个步骤
- 导入蓝图模块, 创建蓝图对象, 同时导入子模块
在new/init.py内,
# 1. 导入蓝图模块, 创建蓝图对象
from flask import Blueprint
news_blue = Blueprint('news', __name__)
# 这里需要导入子模块, 否则程序不知道哪个文件使用了蓝图对象
from . import views
这里的‘news’是视图函数的前缀名,在之后会用 url_for 引用视图函数所渲染的网页,name后还有一个 url_prefix='/admin' 这是给访问地址加前缀的,防止重名。
- 导入创建的蓝图对象, 使用创建的蓝图对象实现路由
在new/views.py内
# 2. 使用蓝图对象实现路由
from . import news_blue
@news_blue.route('/news_list')
def news_list():
return 'news_list'
- 在应用对象上注册这个蓝图对象(跟单文件一样)
app.register_blueprint(news_blue)
4.简单的总结
蓝图的使用步骤:
1.导入蓝图,创建蓝图对象
2.使用蓝图对象,修改路由
3.在app(flask对象)创建的地方注册蓝图