首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Flask 應用工廠模式核心:app = Flask(__name__) 的作用與原理

     編輯:程式設計綜合問答

代碼片段

from flask import Flask
app = Flask(__name__)

核心回答

app = Flask(__name__) 是 **Flask 應用實例的創建(初始化)**。它完成以下關鍵工作:

  1. 確定應用根路徑:__name__ 傳遞當前模塊名(通常為 __main__ 或包名)。Flask 据此推斷項目根目錄,從而自動定位:
    • static 靜態文件目錄(默認 ./static)。
    • templates 模板目錄(默認 ./templates)。
    • instance 實例文件夾(配置文件、數據庫等)。
  2. 建立核心上下文:創建 Flask 對象,內部包含:
    • 路由映射表(url_map)。
    • 視圖函數註冊表。
    • 配置對象(config),默認加載 config.py 或環境變量。
    • 請求/響應處理鏈、錯誤處理器、藍圖註冊機制等。
  3. 支持應用工廠模式:在大型項目中,通常將創建邏輯封裝在 create_app() 函數中:
    def create_app(config_name):
    app = Flask(__name__)
    app.config.from_object(config[config_name])
    # 註冊藍圖、擴展、數據庫...
    return app
    這樣可創建多個隔離的應用實例(如測試、生產、Shell 上下文)。

為什麼傳 __name__?

  • 若模塊作為主程序運行,__name__ == '__main__',Flask 以當前文件所在目錄為根路徑。
  • 若模塊被導入(如 from mypackage import app),__name__ == 'mypackage',Flask 以包根目錄為基準,確保 static/templates 路徑正確,無論從哪裡啟動。
  • 這是 Python 包機制的標準用法,保證資源加載的可移植性。

延伸閱讀

詳細源碼分析可參考:Flask 源碼解析:Flask(__name__) 做了什麼。

總結:app = Flask(__name__) 是**創建 Flask 應用核心對象**的標準方式,參數 __name__ 用於**自動推斷項目根路徑以加載靜態文件、模板、配置**,是 Flask 約定優於配置設計的體現。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved