2012-08-28 35 views
3

我只是感兴趣如何导入Flask的蓝图。它仍然在Flask完成的所有东西的末尾导入python模块,如果我是正确的,python在导入时会做两件事情:在名称空间中注册模块名称,然后在需要时初始化它。Flask如何加载蓝图?

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

但是,如果它只在名称空间中注册,并且只在需要时(当真正的请求到达它时)初始化,那么它是有意义的,一次注册它们(如同推荐的方式我明白了)。这是我想这里的情况:)但只是想问和理解更深一点。

+1

我自己做了一些非常小的调查,看起来它不会初始化蓝图。但是听到有经验的Python人会很高兴,他们说:) –

回答

3

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

你只能在你的瓶的应用程序注册一个蓝图,如果蓝图代码已经被导入到当前Python实例,例如:

from my_blueprint import blueprint_object 

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

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

我尝试简要试图加载在app.before_first_request方法的蓝图,但瓶不允许这样,蓝图都需要什么使得一个请求(和before_first_request有效运行后,只是之前加载,但在此之前其他任何代码都可以播放)。

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