使用 Shell¶
更新日誌
在 0.3 版本中新增。
大家喜愛 Python 的原因之一是互動式 shell。它基本上讓您可以即時執行 Python 指令並立即獲得結果。Flask 本身沒有附帶互動式 shell,因為它不需要任何特定的預先設定,只需匯入您的應用程式並開始操作即可。
然而,有一些方便的輔助工具可以讓在 shell 中操作的體驗更愉快。互動式主控台工作階段的主要問題是,您不像瀏覽器那樣觸發請求,這表示 g
、request
和其他物件都不可用。但是您想要測試的程式碼可能依賴它們,所以您可以怎麼做?
這就是一些輔助函式派上用場的地方。但請記住,這些函式不僅適用於互動式 shell 的使用,也適用於單元測試和其他需要模擬請求上下文的情況。
一般建議您先閱讀 請求上下文。
命令列介面¶
從 Flask 0.11 開始,建議使用 flask shell
命令來使用 shell,它可以自動為您完成許多操作。例如,shell 會自動使用已載入的應用程式上下文進行初始化。
如需更多資訊,請參閱 命令列介面。
建立請求上下文¶
從 shell 建立正確請求上下文的最簡單方法是使用 test_request_context
方法,它會為我們建立一個 RequestContext
>>> ctx = app.test_request_context()
通常您會使用 with
語句使此請求物件生效,但在 shell 中,使用 push()
和 pop()
方法手動操作更容易
>>> ctx.push()
從那時起,您可以開始使用請求物件,直到您呼叫 pop
>>> ctx.pop()
觸發請求前/後的函式¶
僅建立請求上下文,您仍然沒有執行通常在請求之前執行的程式碼。如果您在請求前回呼中連線到資料庫,或者目前使用者未儲存在 g
物件上等等,這可能會導致您的資料庫無法使用。
然而,這可以很容易地自行完成。只需呼叫 preprocess_request()
即可
>>> ctx = app.test_request_context()
>>> ctx.push()
>>> app.preprocess_request()
請記住,preprocess_request()
函式可能會傳回回應物件,在這種情況下,只需忽略它即可。
要關閉請求,您需要稍微技巧一下,然後 after request 函式(由 process_response()
觸發)才會對回應物件進行操作
>>> app.process_response(app.response_class())
<Response 0 bytes [200 OK]>
>>> ctx.pop()
註冊為 teardown_request()
的函式會在上下文彈出時自動呼叫。因此,這是自動拆解請求上下文所需資源(例如資料庫連線)的理想位置。
進一步改善 Shell 體驗¶
如果您喜歡在 shell 中實驗的想法,請建立一個模組,其中包含您想要星號匯入到互動式工作階段中的內容。您也可以在那裡定義更多輔助方法,用於常見的事情,例如初始化資料庫、刪除表格等。
只需將它們放入一個模組(例如 shelltools
),然後從那裡匯入即可
>>> from shelltools import *