New in version 0.3.
喜歡 Python 的原因之一是交互式的 shell ,它可以讓你實(shí)時(shí)運(yùn)行 Python 命令,并且立即得到結(jié)果。 Flask 本身不帶交互 shell ,因?yàn)樗恍枰囟ǖ那捌谠O(shè)置,只要在 shell 中導(dǎo)入你的應(yīng)用就可以開(kāi)始使用了。
有些輔助工具可以讓你在 shell 中更舒服。在交互終端中最大的問(wèn)題是你不會(huì)像瀏覽器一樣觸發(fā)一個(gè)請(qǐng)求,這就意味著無(wú)法使用 g 和 request 等對(duì)象。那么如何在 shell 中測(cè)試依賴這些對(duì)象的代碼呢?
這里有一些有用的輔助函數(shù)。請(qǐng)記住,這些輔助函數(shù)不僅僅只能用于 shell ,還可以用于單元測(cè)試和其他需要假冒請(qǐng)求環(huán)境的情況下。
在讀下去之前最好你已經(jīng)讀過(guò)請(qǐng)求環(huán)境一節(jié)。
在 shell 中創(chuàng)建一個(gè)正確的請(qǐng)求環(huán)境的最簡(jiǎn)便的方法是使用 test_request_context 方法。這個(gè)方法會(huì)創(chuàng)建一個(gè) RequestContext :
>>> ctx = app.test_request_context()
通常你會(huì)使用 with 語(yǔ)句來(lái)激活請(qǐng)求對(duì)象,但是在 shell 中,可以簡(jiǎn)便地手動(dòng)使用 push() 和 pop() 方法:
>>> ctx.push()
從這里開(kāi)始,直到調(diào)用 pop 之前,你可以使用請(qǐng)求對(duì)象:
>>> ctx.pop()
僅僅創(chuàng)建一個(gè)請(qǐng)求環(huán)境還是不夠的,需要在請(qǐng)求前運(yùn)行的代碼還是沒(méi)有運(yùn)行。比如,在請(qǐng)求前可以會(huì)需要轉(zhuǎn)接數(shù)據(jù)庫(kù),或者把用戶信息儲(chǔ)存在 g 對(duì)象中。
使用 preprocess_request() 可以方便地模擬請(qǐng)求前/后動(dòng)作:
>>> ctx = app.test_request_context()
>>> ctx.push()
>>> app.preprocess_request()
請(qǐng)記住, preprocess_request() 函數(shù)可以會(huì)返回一個(gè)響應(yīng)對(duì)象。 如果返回的話請(qǐng)忽略它。
如果要關(guān)閉一個(gè)請(qǐng)求,那么你需要在請(qǐng)求后函數(shù)(由 process_response() 觸發(fā))作用于響應(yīng)對(duì)象前關(guān)閉:
>>> app.process_response(app.response_class())
<Response 0 bytes [200 OK]>
>>> ctx.pop()
teardown_request() 函數(shù)會(huì)在環(huán)境彈出后自動(dòng)執(zhí)行。我們可以使用 這些函數(shù)來(lái)銷毀請(qǐng)求環(huán)境所需要使用的資源(如數(shù)據(jù)庫(kù)連接)。
如果你喜歡在 shell 中的感覺(jué),那么你可以創(chuàng)建一個(gè)導(dǎo)入有關(guān)東西的模塊,在模塊中還 可以定義一些輔助方法,如初始化數(shù)據(jù)庫(kù)或者刪除表等等。假設(shè)這個(gè)模塊名為 shelltools ,那么在開(kāi)始時(shí)你可以:
>>> from shelltools import *
? Copyright 2013, Armin Ronacher. Created using Sphinx.