### 導航
- [索引](# "總目錄")
- [下一頁](# "應用調度") |
- [上一頁](# "大型應用") |
- [Flask 0.10.1 文檔](#) ?
- [Flask 代碼模式](#) ?
# 應用程序的工廠函數
如果您已經開始使用包和藍圖([*用藍圖實現模塊化的應用*](#))輔助您的應用開發了,那么這里還有一些非常好的辦法可以進一步的提升開發體驗。當藍圖被導入的時候,一個通用的模板將會負責創建應用程序對象。但是如果你將這個對象的創建工作移交給一個函數來完成,那么你就可以在此后創建它的多個實例。
這么做的目的在于:
1. 測試。你可以使用多個應用程序的實例,為每個實例分配分配不同的配置,從而測試每一種不同的情況。
1. 多個實例。想象以下情景:您需要同時運行同一個應用的不同版本,您當然可以在你的Web服務器中配置多個實例并分配不同的配置,但是如果你使用工廠函數,你就可以在一個隨手即得的進程中運行這一個應用的不同實例了!
那么該如何使用他們呢?
### 基礎的工廠函數
您可以像下面展示的這樣,從一個函數里啟動這個應用:
~~~
def create_app(config_filename):
app = Flask(__name__)
app.config.from_pyfile(config_filename)
from yourapplication.views.admin import admin
from yourapplication.views.frontend import frontend
app.register_blueprint(admin)
app.register_blueprint(frontend)
return app
~~~
有得必有失,在導入時,您無法在藍圖中使用這個應用程序對象。然而您可以在一個請求中使用他。如果獲取當前配置下的對應的應用程序對象呢?請使用:[current_app](# "flask.current_app") 函數:
~~~
from flask import current_app, Blueprint, render_template
admin = Blueprint('admin', __name__, url_prefix='/admin')
@admin.route('/')
def index():
return render_template(current_app.config['INDEX_TEMPLATE'])
~~~
在這里我們從配置中查找一個網頁模板文件的名字。
### 使用應用程序
所以,要使用這樣的一個應用,你必須先創建這個應用對象,這里是一個運行此類程序的 run.py 文件的例子:
~~~
from yourapplication import create_app
app = create_app('/path/to/config.cfg')
app.run()
~~~
### 工廠函數的改進
前文所提供的工廠函數并不是特別聰明好用,您可以改進它,如下的改變可以是直接且可行的:
1. 使得在單元測試中傳入配置值成為可行,以使您不必在文件系統中創建多個配置文件。
1. 在程序初始時從藍圖中調用一個函數,這樣您就有機會修改應用的參數屬性了(就像在在請求處理器前后的調用鉤子等)
1. 如果必要的話,在應用正在被創建時添加 WSGI 中間件。
? 版權所有 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
- 許可證
- 術語表