Flask如何在内部加载蓝图?

时间:2012-08-28 18:57:41

标签: python flask blueprint

我只是对Flask的蓝图如何导入感兴趣。它仍然在Flask完成的所有工作结束时导入python模块,如果我是正确的,python在导入时会做两件事:在命名空间中注册模块名称,然后在需要时初始化它。

因此,如果Flask蓝图在注册时被初始化,那么所有模块都在内存中,如果要注册大量蓝图,内存就会被浪费,因为在一个请求中基本上你使用了一个蓝图。不是很大的损失,但仍然......

但是如果它只在命名空间中注册并且仅在需要时(当真实请求到达时)进行初始化,那么一次注册它们是有意义的(这是我理解的推荐方式)。这就是我猜这里的情况:)但只是想问一下并深入了解一下。

1 个答案:

答案 0 :(得分:3)

我远远不是专家,但我最近一直在玩蓝图。

如果蓝图代码已导入当前的Python实例,您只能在烧瓶应用上注册蓝图,例如:

from my_blueprint import blueprint_object

app.register_blueprint(blueprint_object, url_prefix='/my_blueprint')

意味着已经分配了blueprint_object所需的所有内存,已经评估了与__init__.py相关联的my_blueprint文件,并且一切准备就绪。

我尝试在app.before_first_request方法中加载蓝图时进行了简单的实验,但是烧瓶不允许这样做,所有蓝图都需要在任何请求之前加载(before_first_request有效地运行< em>只是之后,但在任何其他代码开始播放之前。)

蓝图旨在为烧瓶网络应用程序提供可扩展的功能。我不确定为什么加载它们会浪费资源,除非你曾经只使用过一次特定的功能,在这种情况下,你可能想要将你的应用程序重新分解为许多不同的您可以根据需要启动的应用程序。