Blueprint 使用

注意:可以使用url_map查看路由对象

     在进行Python Web开发时选择Flask框架。项目模块划分阶段,使用Blueprint(这里暂且称之为“蓝本”)。Blueprint通过把实现不同功能的module分开,从而把一个大的application分割成各自实现不同功能的module。在一个Blueprint中可以调用另一个blueprint的view function, 但要加相应的blueprint名。
     Blueprint优点:其本质上来说就是让程序更加松耦合,更加灵活,增加复用性,提高查错效率,降低出错概率。

蓝图的缺点:是一旦应用被创建后,只有销毁整个应用对象才能注销蓝图。

总之,你可以多次注册蓝图,但是不一定每个蓝图都能正确响应。是否能够多次注册 实际上取决于你的蓝图是如何编写的,是否能根据不同的位置做出正确的响应。

    官方使用说明用途:

l  把一个应用分解为一套蓝图,这是针对大型应用的理想方案,一个项目可以实例化一个应用,初始化多个扩展,并注册许多蓝图。

l  在一个应用URL前缀和(或)子域上注册一个蓝图,URL前缀和(或)子域的参数成为蓝图中所有视图的通用视图参数(缺省情况下)。

l  使用不同的URL规则在应用中多次注册蓝图。

l  通过蓝图提供模板过滤器、静态文件、模板和其他工具。蓝图不必执行应用或视图函数

l  当初始化一个Flask扩展,为以上任意一种用途注册一个蓝图。

蓝图的概念

    蓝图的基本概念是:在蓝图被注册到应用之后,所要执行的操作的集合。当分配请求 时, Flask 会把蓝图和视图函数关联起来,并生成两个端点之前的 URL。

蓝图的参数:

     第一个参数:当你使用 @simple_page.route 装饰器绑定一个函数时,蓝图会记录下所登记的 show 函数。当以后在应用中注册蓝图时,这个函数会被注册到应用中。另外,它 会把构建 Blueprint 时所使用的名称(在本例为 simple_page )作 为函数端点的前缀。

     第二个参数:文件夹由 Blueprint 的第二个参数指定,通常为 __name__ 。这个参数 指定与蓝图相关的逻辑 Python 模块或包。如果这个参数指向的是实际的 Python 包 (文件系统中的一个文件夹),那么它就是资源文件夹。如果是一个模块,那么这个 模块包含的包就是资源文件夹。可以通过 Blueprint.root_path 属性来查 看蓝图的资源文件夹:。

               >>> simple_page.root_path

'/Users/username/TestProject/yourapplication'

       可以使用 open_resource() 函数快速打开这个文件夹中的资源:

with simple_page.open_resource('static/style.css') as f:
    code = f.read()

     第三个参数:蓝图的第三个参数是 static_folder 。这个参数用以指定蓝图的静态文件所在的 文件夹,它可以是一个绝对路径也可以是相对路径。:

      admin = Blueprint('admin', __name__, static_folder='static')
      缺省情况下,路径最右端的部分是在 URL 中暴露的部分。这可以通过 static_url_path 来改变。因为上例中的文件夹为名称是 static ,那么 URL 应该是蓝图的 url_prefix 加上 /static 。 如果蓝图注册前缀为 /admin ,那么静态文件 URL 就是 /admin/static 。
      url_for('admin.static', filename='style.css')
      但是,如果蓝图没有 url_prefix ,那么不可能访问蓝图的静态文件夹。 这是因为在这种情况下,URL应该是 / static ,而应用程序的 / static 路线优先。与模板文件夹不同,如果文件不存在于应用静态文件夹中,那么不会 搜索蓝图静态文件夹。。
 
 
# 视图:接收请求,处理业务逻辑,返回结果;视图函数、视图类
# 模板:接收视图返回的结果,渲染数据;
# MVT:设计模式,本质上是为了解耦,提高效率,让更专业的事情,交给更专业的模块去做。
# views视图、template模板、model模型
# 视图函数不允许重名,url路径可以重复!
# 本质:一个函数不能有两个返回值。
# url:同一个url可以有不同的请求方法。
 
# 路由映射是存储在列表容器中,是从前到后依次匹配,如果找到,不会继续查找。
# Rule类存储了具体每个视图函数和url的映射关系
# Map类存储了所有的Rule类规则
# MapAdapter类负责匹配,正则匹配,匹配到一个url规则,让后调用其指向的函数
原文地址:https://www.cnblogs.com/Xingtxx/p/9452656.html