幾天前和同事一塊兒喝酒,你們談到爲何開始讀書這件事。這裏所說的讀書不是專業的書籍,而是一些閒書。結果發現原來咱們開始讀書的緣由很功利。都是由於生活中遇到了困惑,但願在書中找到答案。python
人就是這樣,即使在書中找不到答案。在看書的過程當中發現,這個世界上竟然有不少人是和我同樣的。我解決不了的問題竟然困擾了不少人。當從內而外,推己及人,發現這是一個外部世界廣泛的問題,而不是本身自己的能力、性格和承受能力的問題,這時就會相對輕鬆,至少爲本身的偷懶找到了藉口。按照羅胖曾經說過的「其實人大多數時候沒有本身的觀點,在人生某一個階段的觀點,不過是對現狀的解釋罷了」數據庫
固然說到這裏,我天然已通過了那個功利的階段。由於隨着你讀書越多、思考越多、對世界的瞭解越多,會發現你所面對的未知領域愈來愈大,並且沒有邊界。轉而由於興趣讀書,彷佛才能帶來愉快的體驗。json
虛擬環境是Python解釋器的一個私有副本,在這個環境中你能夠安裝私有的包,並且不會影響系統中安裝的全局的解釋器。
另一個好處是,不須要管理員權限。flask
虛擬環境使用第三方實用工具virtualenv建立windows
安裝方式略。使用virtualenv建立虛擬環境,虛擬名稱通常爲env,固然你能夠選擇不一樣的名字瀏覽器
#建立虛擬環境 virtualenv env #建立完成後,env目錄下出現以下目錄 Include/ Lib/ Scripts/ pip-selfcheck.json tcl/
激活虛擬環境(windows下)服務器
venv\Scripts\activate
激活後,提示符變成(venv)$session
#激活後就能夠直接執行語句,並經過瀏覽器http://127.0.0.1訪問 (venv)$ python hello.py
#初始化 from flask import Flask app = Flask(__name__) #路由和視圖函數 @app.route('/') def index(): return '<h1>Hello World!</h1>' #啓動服務器 #debug=True 啓動調試模式 #若是咱們想要其餘人訪問,可使用app.run(host=0.0.0.0.0,debug=True) if __name__ == '__main__': app.run(debug=True)
flask類的構造只有一個必須指定的參數,即程序主模塊或包的名字。在大多數程序中,Python的__name__變量就是所需的值。app
處理URL和函數之間關係的程序稱爲路由。函數
在Flask程序中定義路由最簡便的方式,是使用程序實例提供的app.route修飾器。
緊隨修飾器以後的函數,咱們稱之爲視圖函數[index()]。
Flask從客戶端收到請求時,要讓視圖函數可以訪問一些對象,這樣才能處理請求。
那麼要想讓視圖函數可以訪問對象,一個顯而易見的方法是將其做爲參數傳入視圖函數。
如你所想,這樣會致使每一個視圖函數都要增長一個參數。而且考慮到,若是視圖函數還須要訪問其餘對象,那麼狀況可能更糟。因此,Flask使用上下文臨時的把某些對象變爲全局可訪問。
from flask import request @app.route('/') def index(): user_agent= request.headers.get('User-Agent') return '<p>Your browser is %s</p>' % user-agent
Flask上下文分爲程序上下文和請求上下文
Flask在分發請求以前激活程序和請求上下文,請求處理結束後再將其刪除。
程序上下文被推送以後,就能夠在線程中使用current_app 和 g 變量
請求上下文被推送後,就額可使用request和session變量。
有時在處理請求以前或以後執行代碼會頗有用。例如在請求開始時,咱們須要建立數據庫鏈接或認證發起請求的用戶。爲了不在每一個視圖中都使用重複的代碼,Flask提供了註冊通用函數的功能。
請求鉤子使用修飾器實現。Flask支持如下4中鉤子
before_first_request: 註冊是一個函數,在處理第一個請求以前運行
before_request : 註冊一個函數,在每次請求以前運行
after_request: 註冊一個函數,若是沒有未處理的異常拋出,在每次請求以後運行。
teardown_request:註冊一個函數,即便有未被處理的異常拋出,也在每次請求以後運行。
在請求鉤子函數和視圖函數之間共享數據通常使用上下文全局變量g例如,before_request處理程序能夠從數據庫中加載已登陸用戶,並將其保存到g.user中。隨後調用視圖函數時,視圖函數在使用g.user獲取用戶。