Flask---框架快速入門
阿新 • • 發佈:2019-01-23
環境區域性變數
內幕
如果你想理解其工作機制及如何利用環境區域性變數實現自動化測試,請閱讀此節,否則可跳過。
Flask 中的某些物件是全域性物件,但卻不是通常的那種。這些物件實際上是特定環境的區域性物件的代理。雖然很拗口,但實際上很容易理解。
想象一下處理執行緒的環境。一個請求傳入,Web 伺服器決定生成一個新執行緒( 或者別的什麼東西,只要這個底層的物件可以勝任併發系統,而不僅僅是執行緒)。 當 Flask 開始它內部的請求處理時,它認定當前執行緒是活動的環境,並綁定當前的應用和 WSGI 環境到那個環境上(執行緒)。它的實現很巧妙,能保證一個應用呼叫另一個應用時不會出現問題。
所以,這對你來說意味著什麼?除非你要做類似單元測試的東西,否則你基本上可以完全無視它。你會發現依賴於一段請求物件的程式碼,因沒有請求物件無法正常執行。解決方案是,自行建立一個請求物件並且把它繫結到環境中。單元測試的最簡單的解決方案是:用 test_request_context() 環境管理器。結合 with 宣告,繫結一個測試請求,這樣你才能與之互動。下面是一個例子:
from flask import request with app.test_request_context('/hello', method='POST'): # now you can do something with the request until the # end of the with block, such as basic assertions: assert request.path == '/hello' assertrequest.method == 'POST'
from flask import request with app.request_context(environ): assert request.method == 'POST'