Flask實戰-留言板-使用Flask-DebugToolbar調試程序、Flask配置的兩種組織形式
使用Flask-DebugToolbar調試程序
擴展Flask-DebugToolbar提供了一系列調試功能,可以用來查看請求的SQL語句、配置選項、資源加載情況等信息。這些信息在開發時會非常有用。首先使用pipenv安裝Flask-DebugToolbar及其依賴:
然後實例化擴展提供的DebugToolExtension類,傳入程序實例APP,以完成擴展的初始化:
from flask immport Flask from flask_debugtoolbar import DebugToolbarExtension app = Flask(__name__) toobar = DebugToolbarExtension(app)
開發時不需要也不建議使用Flask-DebugToolbar。Flask-DebugToolbar只在開啟了調試模式時才會啟動,所以我們要確保設置正確的FLASK_ENV環境變量值:開發時設為development;部署時則設為production。另外,Flask-DebugToolbar會攔截重定向請求,將DEBUG_TB_INTERCEPT_REDIRECTS配置變量設為False可以關閉這個特性
DEBUG_TB_INTERCEPT_REDIRECTS = false
這時啟動程序,就會發現頁面右側多了一個工具欄,單擊“Hide”按鈕可以隱藏為一個浮動按鈕,如下所示:
在調試工具欄中,除了Flask版本以及頁面的加載時間信息,右側的功能選項分別為:HTTP首部、請求相關變量、配置變量、模板渲染記錄、數據庫查詢記錄、日誌、路由列表、性能分析器。
Flask配置的兩種組織形式
在Flask中,開發和部署時通常需要不同的配置。比如,存儲在SECRET_KEY配置變量的秘鑰,在開發時可以使用占位字符,但在生產環境下部署時則需要使用一個隨機生成的字符串。為了區分,我們通常會有兩種組織這種分離的方式。
使用調試工具查看程序配置
環境變量優先
為了將配置和程序分離開來,建議通過環境變量來保存配置,並且對不同場景下的配置進行分離。
.env和.flaskenv文件可以存儲環境變量,對於包含敏感信息的配置,我們優先或僅從環境變量中讀取,這些環境變量統一在.env文件中定義,從而實現了敏感配置的分離。通過在.gitignore中添加這個文件,不會被提交進Git倉庫。
實例文件夾覆蓋
為了方便存儲開發和部署時的各類文件,Flask提供了實例文件夾支持(instance folder),我們可以在項目根目錄(程序包旁)中創建一個名稱為instance的文件夾,在這個文件夾中存儲開發或部署時使用的配置文件,包含敏感信息的文件,或是臨時創建的數據庫文件等。
如果將這個實例文件夾放到.gitignore文件夾中,可以確保不會被提交到Git倉庫中。
當使用示例文件夾存儲配置時,一個方便的做法是把包含敏感數據的配置放到instance文件夾的配置文件中,外部只保留通用的公開配置。Flask允許加載多次配置,重復的配置以最後定義的配置為準,所以我們可以使用instance文件夾中的配置來覆蓋通用配置:
app = Flask(__name__, instance_relative_config=True) app.config.from_object(‘config‘) # 通用配置 app.config.from_pyfile(‘config.py‘) # instance文件夾下的配置
在創建程序實例時,我們將instance_relative_config參數設為True,這會告訴Flask我們的配置文件路勁是相對於實例文件夾的(默認是相對於程序實例根目錄的)。
臨時的數據庫文件可以放到實例文件夾中,實例文件夾的路徑可以通過app.instance_path屬性獲取,所以你可以使用下面的方法構建數據庫URI:
SQLALCHEMY_DATABASE_URI = ‘sqlite:///’ + os.path.join(app.instance_path, ‘data.db’)
Flask不會自動創建實例文件夾,所以你需要手動創建。在單腳本程序中,實例文件夾在腳本旁創建;在使用程序包的程序中,實例文件夾在程序包旁創建。
當我們使用flask shell命令時,輸出的信息會給出實例文件夾的合適位置。
Flask實戰-留言板-使用Flask-DebugToolbar調試程序、Flask配置的兩種組織形式