### 導航
- [索引](# "總目錄")
- [下一頁](# "應用程序的工廠函數") |
- [上一頁](# "Flask 代碼模式") |
- [Flask 0.10.1 文檔](#) ?
- [Flask 代碼模式](#) ?
# 大型應用
對于比較大型的應用,更好的做法是使用包管理代碼,而不是模塊來管理代碼。這非常簡單,設想一個如下結構的應用:
~~~
/yourapplication
/yourapplication.py
/static
/style.css
/templates
layout.html
index.html
login.html
...
~~~
### 簡單的包
將一個項目改為一個更大的包,僅僅創建一個新的 yourapplication 文件夾在已存的文件夾下面,然后將所有的的文件都移動到它下面。之后將 yourapplication.py重命名為 __init__.py (確保先刪除了其中所有的 .pyc 文件,否則可能導致錯誤的結果)
您最后得到的東西應該像下面這樣:
~~~
/yourapplication
/yourapplication
/__init__.py
/static
/style.css
/templates
layout.html
index.html
login.html
...
~~~
如何在此種方式下運行您的應用?原來的 pythonyourapplication/__init__.py不能再工作了。這是由于 Python 不希望在包中的模塊成為初始運行的文件。但這不是一個大問題,僅僅添加一個名叫 runserver.py 的新文件,把這個文件放在yourapplication 文件夾里,并添加如下功能:
~~~
from yourapplication import app
app.run(debug=True)
~~~
然后,我們又能對應用做什么呢?現在我們可以重新構造我們的應用,將其改造為多個模塊。你唯一需要記住的就是下面的速記備忘表:
1. Flask 程序對象的創建必須在 __init__.py 文件里完成,這樣我們就可以安全的導入每個模塊,而 __name__ 變量將會被分配給正確的包。
1. 所有(上面有 [route()](# "flask.Flask.route") 裝飾器的那些)視圖函數必須導入到 __init__.py 文件。此時,請通過模塊而不是對象本身作為路徑導入這些視圖函數。**必須在應用對象創建之后** 導入視圖模塊。
這里是 __init__.py 的一個例子:
~~~
from flask import Flask
app = Flask(__name__)
import yourapplication.views
~~~
而 views.py 應該看起來像這樣:
~~~
from yourapplication import app
@app.route('/')
def index():
return 'Hello World!'
~~~
您最終應該得到的程序結構應該是這樣:
~~~
/yourapplication
/runserver.py
/yourapplication
/__init__.py
/views.py
/static
/style.css
/templates
layout.html
index.html
login.html
...
~~~
循環導入
每個 Python 程序員都會討厭他們,而我們反而還添加了幾個進去:循環導入(在兩個模塊相互依賴對方的時候,就會發生循環導入)。在這里views.py 依賴于 __init__.py。通常這被認為是個不好的主意,但是在這里實際上不會造成問題。之所以如此,是因為我們實際上沒有在__init__.py 里使用這些視圖,而僅僅是保證模塊被導入了。并且,我們是在文件的結尾這么做的。
這種做法仍然有些問題,但是如果您想要使用修飾器,那么沒有其他更好的方法了。檢查 [*聚沙成塔*](#) 這一章來尋找解決問題的些許靈感吧。
### 與藍圖一起工作
如果您有規模較大的應用,建議您將他們分拆成小的組,讓每個組接口于藍圖提供的輔助功能。關于這一主題進一步的介紹請參考[*用藍圖實現模塊化的應用*](#) 這一章節的文檔
? 版權所有 2013, Armin Ronacher.
- 歡迎使用 Flask
- 前言
- 給有經驗程序員的前言
- 安裝
- 快速入門
- 教程
- 介紹 Flaskr
- 步驟 0: 創建文件夾
- 步驟 1: 數據庫模式
- 步驟 2: 應用設置代碼
- 步驟 3: 創建數據庫
- 步驟 4: 請求數據庫連接
- 步驟 5: 視圖函數
- 步驟 6: 模板
- 步驟 7: 添加樣式
- 福利: 應用測試
- 模板
- 測試 Flask 應用
- 記錄應用錯誤
- 配置處理
- 信號
- 即插視圖
- 應用上下文
- 請求上下文
- 用藍圖實現模塊化的應用
- Flask 擴展
- 與 Shell 共舞
- Flask 代碼模式
- 大型應用
- 應用程序的工廠函數
- 應用調度
- 使用 URL 處理器
- 部署和分發
- 使用 Fabric 部署
- 在 Flask 中使用 SQLite 3
- 在 Flask 中使用 SQLAlchemy
- 上傳文件
- 緩存
- 視圖裝飾器
- 使用 WTForms 進行表單驗證
- 模板繼承
- 消息閃現
- 用 jQuery 實現 Ajax
- 自定義錯誤頁面
- 延遲加載視圖
- 在 Flask 中使用 MongoKit
- 添加 Favicon
- 數據流
- 延遲請求回調
- 添加 HTTP Method Overrides
- 請求內容校驗碼
- 基于 Celery 的后臺任務
- 部署選擇
- mod_wsgi (Apache)
- 獨立 WSGI 容器
- uWSGI
- FastCGI
- CGI
- 聚沙成塔
- API
- JSON 支持
- Flask 中的設計決策
- HTML/XHTML 常見問題
- 安全注意事項
- Flask 中的 Unicode
- Flask 擴展開發
- Pocoo 風格指引
- Python 3 支持
- 升級到最新版本
- Flask Changelog
- 許可證
- 術語表