2012-08-28 32 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應用程序提供可擴展功能。我不確定爲什麼加載它們會浪費資源,除非你一次只使用一個特定的功能塊,在這種情況下,你可能想要將你的應用程序重新分成許多不同的根據需要可以旋轉的應用程序。