2012-07-13 116 views
21

我試圖用Flask創建一個簡單但不平凡的應用程序,並且我一直遇到在文檔中沒有很好解釋的情況。燒瓶應用程序的結構

我想不同模塊之間被分割我的應用程序,但它看起來像它很難從其他地方比主模塊進入主app對象(或dbflask-sqlalchemy)。看起來你必須真正寫出你自己的方式來把它看作是一切都可以訪問的全局,這需要一些有問題的代碼和一些時間。

appdb都是在實例化主應用程序的級別創建的,每個示例都假定它們在頂層可用。但是,如果我將不同的url處理程序分成不同的模塊,我將失去使用@app.route修飾器的能力。我可以用app.add_url_rule('/...', some.module...)解決這個問題,但是再次,應用程序不會傳遞給該函數。

同樣的事情發生在db - 我不知道我是否應該堅持到g,或通過app以某種方式訪問​​它。這樣做並不能幫助我將模型移動到單獨的模塊中,但是如何在導入模型時訪問db?所有示例再次假定它只是作爲局部變量提供。

我錯過了一些明顯的東西,還是我想在這裏用錯誤的任務燒瓶?

+0

裝飾器只是功能包裝。您可以創建一個封裝所有服務器邏輯的類,並將類中的所有'db'和'app'變量存儲在該類中。 – Blender 2012-07-13 00:12:50

+0

@Blender當然,有很多方法可以手工解決這個問題。我真正想知道的是,如果有任何標準的方式來處理它,並且如果它似乎完全從文檔中丟失,那麼還有沒有更多的驚喜。我期待從瓶子本身出現某種更明顯的解決方案。 – viraptor 2012-07-13 00:19:51

+0

您可以使用Blueprint – user956424 2013-06-24 07:33:53

回答

19

你的問題的答案是藍圖。事實上,如果你看看文檔,就會提到藍圖有助於在模塊中分割應用程序。

樣品的編號:

from flask import Blueprint 

    mod = Blueprint(blueprint_name, __name__, template_folder="folder_name" 
        static_folder="folder_name") 

    @mod.route('/mymodule') 
    def view(): 
     # your code 

在app.py

from yourmodule import mod 

    app.register_blueprint(mod) 

這是應用程序劃分成模塊的正確方式。查看藍圖文檔以獲取更多詳細信息。

此外,如果您需要訪問任何其他模塊中的應用程序,則應該使用應用程序的current_app代理。

from flask import current_app 

看看這個document是指導如何燒瓶應用分成由燒瓶的創造者大項目模塊。

+0

非常不錯的文檔鏈接! ;) – 2012-08-15 19:41:51

+1

@IgnasB。謝謝!看看這個回購github與基本的大型燒瓶應用程序結構由我https://github.com/codecool/flask-app-structure – codecool 2012-08-16 11:14:06

+0

會看看! ;) – 2012-08-16 14:47:50

2

你見過新blueprintsfeature(我沒有使用過,但聽起來像這樣可以你的情況有幫助)。

相關問題