5. 对 Flask 蓝图(Blueprint)的理解
1.什么是蓝图
蓝图/Blueprint 是一个存储操作方法的容器,这些操作在这个Blueprint被注册到一个应用之后就可以被调用,Flask可以通过Blueprint 来组织URL以及处理请求。
Flask使用 Blueprint 让应用实现模块化,在Flask中,Blueprint 具有如下属性:
1.一个应用可以具有多个Blueprint,也就可以分割为多个模块。
2.可以将一个Blueprint注册到任何一个未使用的URL下,比如 “/”、“/sample”或者子域名
3.在一个应用中,一个模块可以注册多次
4.Blueprint可以单独具有自己的模板、静态文件或者其它的通用操作方法,它并不是必须要实现应用的视图和函数的
5.在一个应用初始化时,就应该要注册需要使用的Blueprint
但是一个Blueprint并不是一个完整的应用,它不能独立于应用运行,而必须要注册到某一个应用中。
2.蓝图的应用场景
1.把一个应用分解为一个蓝图的集合。这对大型应用是理想的。一个项目可以实例化一个应用对象,初始化几个扩展,并注册一集合的蓝图。
2. 以 URL 前缀和/或子域名,在应用上注册一个蓝图。 URL 前缀/子域名中的参数即成为这个蓝图下的所有视图函数的共同的视图参数(默认情况下)。
3. 在一个应用中用不同的 URL 规则多次注册一个蓝图。
4. 通过蓝图提供模板过滤器、静态文件、模板和其它功能。一个蓝图不一定要实现应用或者视图函数。
5. 初始化一个 Flask 扩展时,在这些情况中注册一个蓝图。
3.蓝图的缺点
不能在应用创建后撤销注册一个蓝图而不销毁整个应用对象。
4.如何创建蓝图
蓝图/ Blueprint 对象应用起来和一个应用/Flask对象差不多,最大的区别在于一个蓝图对象没有办法独立运行,必须将它注册到一个应用对象上才能生效。使用蓝图的步骤有三:
1.创建蓝图对象
-
from flask import Blueprint
-
-
admin = Blueprint('admin', __name__)
-
"""
-
参数1:蓝图的名字
-
参数2:蓝图所在的包或模块
-
"""
2. 在这个蓝图对象上进行操作,注册路由,指定静态文件夹,注册模板过滤器
简单的说,就是把 视图函数 注册到 蓝图上面
-
-
def admin_home():
-
return 'admin_home'
3. 再把蓝图对象注册到应用对象上面
app.register_blueprint(admin,url\_prefix='/admin')
当这个应用启动后,可以通过/admin/ 访问到蓝图中定义的视图函数。