Flask组件化开发:Blueprint(蓝图)

如题所述

第1个回答  2022-07-12

我们在管理路由的时候,是直接在app对象上进行的路由设置的,像下面这样:

显然,如果所有的路由都直接在app应用对象上直接注册,不仅使我们的程序结构十分混乱,而且大大增加了程序的系统内存消耗。至于如何节约,先卖个关子。

那么使用蓝图进行程序路由的模块化管理是如何做到的呢?

可以看到在 app 文件夹下有三个文件夹 main auth 以及 api 内含有视图函数。如果不太清楚flask项目结构的,可以转 Flask项目结构

这三个文件夹中的 init .py都是进行蓝图的定义的。举 main 文件夹下的例子

在应用对象app上 注册 蓝图对象。

第一个参数是 蓝图对象
随后的都是 可选参数

1.static_folder :
和应用对象不同,蓝图对象创建时不会默认注册静态目录的路由。需要我们在 创建时指定static_folder 参数。如图中我们设置参数为 ‘static’ ,也就是项目结构中的 static 文件夹。

这样我们可以使用地址 /static/main/layout.css 访问static目录下的css、js、image文件了

2.url_prefix

默认的值为 '/' ######用一个demo.py来解释吧( 这个demo也要在虚拟环境下运行

显而易见,这个参数就是增加相对路径的前缀的
当然也可以不用直接在渲染成模板时自己加上。

中间穿插了这么多,再看一下main/views.py里边的内容吧

这个例子就是直接在views.py里边直接加url前缀。

这个文件下就是在蓝图对象上进行操作即创建路由 ,通过 render_template() 方法将页面渲染出来。

我一般习惯将前边所有的工作做完之后再去前端HTML文件中去设置路由的跳转。例如:

url_for是通过endpoint查询url地址,然后找视图函数

根据个人的理解来说一下蓝图的运行机制: