### 導航
- [索引](# "總目錄")
- [下一頁](# "Flask 代碼模式") |
- [上一頁](# "Flask 擴展") |
- [Flask 0.10.1 文檔](#) ?
# 與 Shell 共舞
0.3 新版功能.
Python 擁有的交互式 Shell 是人人都喜歡它的一個重要原因。交互式 Shell允許你實時的運行 Python 命令并且立即得到返回結果。Flask 本身并未內置一個交互式 Shell ,因為它并不需要任何前臺的特殊設置,僅僅導入您的應用然后開始探索和使用即可。
然而這里有一些易于獲得的助手,可以幫助您在 Shell 遨游時獲得更為愉悅的體驗。交互式控制臺回話的一個重要問題是,您并不是像在瀏覽器當中那樣激發一個請求,因此 [g](# "flask.g") 和 [request](# "flask.request")以及其他的一些函數不能使用。然而您想要測試的代碼也許依賴他們,那么讓我們瞧瞧該如何解決這個問題。
這就是該那些輔助函數登場的時候了。然而應當說明的是,這些函數并非僅僅為在交互式 Shell 里使用而編寫的,也可以用于單元測試或者其他需要一個虛假的請求上下文的情景。
一般來說,在閱讀本章節之前還是建議大家先閱讀 [*請求上下文*](#)相關章節。
### 創建一個請求上下文
從 Shell 創建一個合適的上下文,最簡單的方法是使用[test_request_context](# "flask.Flask.test_request_context") 方法,此方法會創建一個 [RequestContext](# "flask.ctx.RequestContext") 對象:
~~~
>>> ctx = app.test_request_context()
~~~
一般來說,您可以使用 with 聲明來激活這個請求對象,但是在終端中,調用 [push()](# "flask.ctx.RequestContext.push")方法和 [pop()](# "flask.ctx.RequestContext.pop") 方法會更簡單:
~~~
>>> ctx.push()
~~~
從這里往后,您就可以使用這個請求對象直到您調用 pop方法為止:
~~~
>>> ctx.pop()
~~~
### 激發請求發送前后的調用
僅僅創建一個請求上下文,您仍然不能運行請求發送前通常會運行的代碼。如果您在將連接數據庫的任務分配給發送請求前的函數調用,或者在當前用戶并沒有被儲存在 [g](# "flask.g") 對象里等等情況下,您可能無法訪問到數據庫。
您可以很容易的自己完成這件事,僅僅手動調用[preprocess_request()](# "flask.Flask.preprocess_request") 函數即可:
~~~
>>> ctx = app.test_request_context()
>>> ctx.push()
>>> app.preprocess_request()
~~~
請注意, [preprocess_request()](# "flask.Flask.preprocess_request") 函數可能會返回一個響應對象。這時,忽略它就好了。
要關閉一個請求,您需要在請求后的調用函數(由 [process_response()](# "flask.Flask.process_response")函數激發)運行之前耍一些小小的把戲:
~~~
>>> app.process_response(app.response_class())
<Response 0 bytes [200 OK]>
>>> ctx.pop()
~~~
被注冊為 [teardown_request()](# "flask.Flask.teardown_request") 的函數將會在上下文環境出棧之后自動執行。所以這是用來銷毀請求上下文(如數據庫連接等)資源的最佳地點。
### 進一步提升 Shell 使用體驗
如果您喜歡在 Shell 里實驗您的新點子,您可以創建一個包含你想要導入交互式回話中的東西的的模塊。在這里,您也可以定義更多的輔助方法用來完成一些常用的操作,例如初始化數據庫、刪除一個數據表等。
把他們放到一個模塊里(比如 shelltools 然后在 Shell 中導入它):
~~~
>>> from shelltools import *
~~~
? 版權所有 2013, Armin Ronacher.
- 歡迎使用 Flask
- 前言
- 給有經驗程序員的前言
- 安裝
- 快速入門
- 教程
- 介紹 Flaskr
- 步驟 0: 創建文件夾
- 步驟 1: 數據庫模式
- 步驟 2: 應用設置代碼
- 步驟 3: 創建數據庫
- 步驟 4: 請求數據庫連接
- 步驟 5: 視圖函數
- 步驟 6: 模板
- 步驟 7: 添加樣式
- 福利: 應用測試
- 模板
- 測試 Flask 應用
- 記錄應用錯誤
- 配置處理
- 信號
- 即插視圖
- 應用上下文
- 請求上下文
- 用藍圖實現模塊化的應用
- Flask 擴展
- 與 Shell 共舞
- Flask 代碼模式
- 大型應用
- 應用程序的工廠函數
- 應用調度
- 使用 URL 處理器
- 部署和分發
- 使用 Fabric 部署
- 在 Flask 中使用 SQLite 3
- 在 Flask 中使用 SQLAlchemy
- 上傳文件
- 緩存
- 視圖裝飾器
- 使用 WTForms 進行表單驗證
- 模板繼承
- 消息閃現
- 用 jQuery 實現 Ajax
- 自定義錯誤頁面
- 延遲加載視圖
- 在 Flask 中使用 MongoKit
- 添加 Favicon
- 數據流
- 延遲請求回調
- 添加 HTTP Method Overrides
- 請求內容校驗碼
- 基于 Celery 的后臺任務
- 部署選擇
- mod_wsgi (Apache)
- 獨立 WSGI 容器
- uWSGI
- FastCGI
- CGI
- 聚沙成塔
- API
- JSON 支持
- Flask 中的設計決策
- HTML/XHTML 常見問題
- 安全注意事項
- Flask 中的 Unicode
- Flask 擴展開發
- Pocoo 風格指引
- Python 3 支持
- 升級到最新版本
- Flask Changelog
- 許可證
- 術語表