Flask 大型應(yīng)用

2021-08-23 18:41 更新

對于比較大型的應(yīng)用,更好的做法是使用包管理代碼,而不是模塊來管理代碼。 這非常簡單,設(shè)想一個如下結(jié)構(gòu)的應(yīng)用:

/yourapplication
    /yourapplication.py
    /static
        /style.css
    /templates
        layout.html
        index.html
        login.html
        ...

簡單的包

將一個項目改為一個更大的包,僅僅創(chuàng)建一個新的 yourapplication 文件夾在 已存的文件夾下面,然后將所有的的文件都移動到它下面。之后將 yourapplication.py 重命名為 __init__.py (確保先刪除了其中所有的 .pyc 文件,否則可能導(dǎo)致 錯誤的結(jié)果)

您最后得到的東西應(yīng)該像下面這樣:

/yourapplication
    /yourapplication
        /__init__.py
        /static
            /style.css
        /templates
            layout.html
            index.html
            login.html
            ...

如何在此種方式下運(yùn)行您的應(yīng)用?原來的 ?python yourapplication/__init__.py? 不能再工作了。這是由于 Python 不希望在包中的模塊成為初始運(yùn)行的文件。但這 不是一個大問題,僅僅添加一個名叫 runserver.py 的新文件,把這個文件放在 yourapplication 文件夾里,并添加如下功能:

from yourapplication import app
app.run(debug=True)

然后,我們又能對應(yīng)用做什么呢?現(xiàn)在我們可以重新構(gòu)造我們的應(yīng)用,將其 改造為多個模塊。你唯一需要記住的就是下面的速記備忘表:

  1. Flask 程序?qū)ο蟮膭?chuàng)建必須在 __init__.py 文件里完成, 這樣我們就可以安全的導(dǎo)入每個模塊,而 __name__ 變量將 會被分配給正確的包。
  2. 所有(上面有 ?route()? 裝飾器的那些)視圖函數(shù)必須 導(dǎo)入到 __init__.py 文件。此時,請通過模塊而不是對象本身作為路徑 導(dǎo)入這些視圖函數(shù)。必須在應(yīng)用對象創(chuàng)建之后 導(dǎo)入視圖模塊。

這里是 __init__.py 的一個例子:

from flask import Flask
app = Flask(__name__)

import yourapplication.views

而 views.py 應(yīng)該看起來像這樣:

from yourapplication import app

@app.route('/')
def index():
    return 'Hello World!'

您最終應(yīng)該得到的程序結(jié)構(gòu)應(yīng)該是這樣:

/yourapplication
    /runserver.py
    /yourapplication
        /__init__.py
        /views.py
        /static
            /style.css
        /templates
            layout.html
            index.html
            login.html
            ...

循環(huán)導(dǎo)入

每個 Python 程序員都會討厭他們,而我們反而還添加了幾個進(jìn)去: 循環(huán)導(dǎo)入(在兩個模塊相互依賴對方的時候,就會發(fā)生循環(huán)導(dǎo)入)。在這里 views.py 依賴于 __init__.py。通常這被認(rèn)為是個不好的主意,但是 在這里實際上不會造成問題。之所以如此,是因為我們實際上沒有在 __init__.py 里使用這些視圖,而僅僅是保證模塊被導(dǎo)入了。并且,我們是 在文件的結(jié)尾這么做的。

這種做法仍然有些問題,但是如果您想要使用修飾器,那么沒有 其他更好的方法了。

與藍(lán)圖一起工作

如果您有規(guī)模較大的應(yīng)用,建議您將他們分拆成小的組,讓每個組 接口于藍(lán)圖提供的輔助功能。關(guān)于這一主題進(jìn)一步的介紹請參考 用藍(lán)圖實現(xiàn)模塊化的應(yīng)用 這一章節(jié)的文檔


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號