使用 Shell

更新日誌

在 0.3 版本中新增。

大家喜愛 Python 的原因之一是互動式 shell。它基本上讓您可以即時執行 Python 指令並立即獲得結果。Flask 本身沒有附帶互動式 shell,因為它不需要任何特定的預先設定,只需匯入您的應用程式並開始操作即可。

然而,有一些方便的輔助工具可以讓在 shell 中操作的體驗更愉快。互動式主控台工作階段的主要問題是,您不像瀏覽器那樣觸發請求,這表示 grequest 和其他物件都不可用。但是您想要測試的程式碼可能依賴它們,所以您可以怎麼做?

這就是一些輔助函式派上用場的地方。但請記住,這些函式不僅適用於互動式 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 *