Flask依賴兩個外部庫:Werkzeug和Jinja2。Werkzeug是一個WSGI(在Web應用和多種服務器之間的標準Python接口)工具集;Jinja2負責渲染模板。因此在安裝Flask以前,須要安裝這兩個外部庫。html
最好在命令行中安裝python
virtualenv --version 能夠查看版本web
接下來使用virtualenv命令在當前文件夾中建立Python虛擬環境。這個命令只有一個必需的參數,即虛擬環境的名字。建立虛擬環境後,當前文件夾中會出現一個子文件夾,與虛擬環境相關的文件都保存在這個子文件夾中。通常,虛擬環境會被命名爲venvflask
運行完成後,在運行的目錄下,會新增一個venv文件夾,它保存全新的虛擬環境,其中有一個私有的Python解釋器。瀏覽器
venv\Scripts\activate服務器
pip install flaskapp
安裝成功後,可經過 pip list --format columns 查看全部安裝包函數
from flask import Flask #導入flask app=Flask(__name__) #建立Flask對象 @app.route('/') def hell_world(): return 'hello world!' if __name__ == '__main__': app.run()
輸入上面的網址,發現hello world顯示出來了工具
那麼,這段代碼作了什麼?post
首先,咱們導入了Flask類。這個類的實例將會是咱們的WSGI應用程序
接下來,咱們建立一個該類的實例,第一個參數是應用模塊或包的名稱。若是你使用單一的模塊,應該使用__name__,由於模塊的名稱將會因其做爲單獨應用啓動仍是做爲模塊導入而有不一樣(也就是__main__或實際的導入名)。這是必須的,這樣Flask才知道到哪去找模塊、靜態文件等等。詳見Flask文檔
而後,咱們使用route()裝飾器告訴Flask什麼樣的URL能觸發咱們的函數。
這個函數的名字也在生成URL時被特定的函數採用,這個函數返回咱們想要顯示在用戶瀏覽器中的信息。
最後咱們用run()函數來讓應用運行在本地服務器上。main保證該腳本被Python解釋器直接執行的時候纔會運行,而不是做爲模塊導入的時候。
雖然run()方法適用於啓動本地的開發服務器,可是每次修改代碼後都要手動重啓它。這樣並不夠優雅。有兩種途徑來啓動調試模式:
一種是直接在應用對象上設置:
app.debug=True
app.run()
另外一種是做爲run方法的一個參數傳入:
app.run(debug=True)
客戶端(如Web瀏覽器)把請求發送給Web服務器,Web服務器再把請求發送給Flask程序實例。程序實例須要知道對每一個URL請求運行了哪些代碼,因此保存了一個URL到Python函數的映射關係。處理URL和函數之間關係的程序爲路由。
在Flask程序中定義路由的最簡便方式,是使用程序實例提供的app.route修飾器,把修飾的函數註冊爲路由。
修飾器是python語言的標準特性,可使用不一樣的方式修改函數的行爲。一般用法是使用修飾器把函數註冊爲事件的處理程序。
你也能夠構造含動態部分的URL,也能夠在一個函數上附着多個規則
要給URL添加變量部分,你能夠把這些特殊字段標記爲<variable_name>,這個部分將會做爲命名參數傳遞到你的函數。規則能夠用<converter:variable_name>指定一個可選的轉換器。
示例
from flask import Flask #導入flask app=Flask(__name__) #建立Flask對象 @app.route('/') def hell_world(): return 'hello world!' @app.route('/user/<username>') def show_user_profile(username): #顯示該用戶名的用戶信息 return 'User %s'%username @app.route('/post/<int:post_id>') def show_post(post_id): #根據id顯示文章,id是整型數據 return 'Post %d'%post_id if __name__ == '__main__': app.run(debug=True)
上述代碼中使用了轉換器。它有下面幾種:
int 接受整數
float 接受浮點數
path 默認。但也接受斜線
運行文件,在瀏覽器中將地址修改成「http://127.0.0.1:5000/user/張三」,查看展現效果
輸入「http://127.0.0.1:5000/post/2」
若是Flask能匹配URL,那麼Flask能生成它們嗎?你能夠用url_for()來給指定的函數構造URL。它接受函數名做爲第一個參數,也接受對應URL規則的變量部分的命名參數。未知變量部分會添加到URL末尾做爲查詢參數。
from flask import Flask,url_for app=Flask(__name__) @app.route('/url/') def get_url(): #根據id顯示文章,id是整型數據 return url_for('show_post',post_id=2) if __name__ == '__main__': app.run(debug=True)
HTTP(與web應用會話的協議)有許多不一樣的訪問URL方法。默認狀況下,路由只回應GET請求,可是經過route()裝飾器傳遞methods參數能夠改變這個行爲。
動態Web應用也會須要靜態文件,一般是CSS和JavaScript文件。理想情況下,你已經配置好Web服務器來提供靜態文件,但在開發中,Flask也能夠作到。只要在你的包中或是模板所在目錄中建立一個名爲static的文件夾,在應用中使用「/static」便可訪問
給靜態文件生成URL,使用特殊的「static」端點名
url_for('static',filename='hello.html')
模板是一個包含響應文本的文件,其中包含用佔位變量表示的動態部分,其具體值只在請求的上下文中才能知道。使用真實值替換變量,再返回最終獲得的響應字符串,這一過程稱爲渲染。爲了渲染模板,Flask使用了Jinja2的強大模板引擎。
一、渲染模板
默認狀況下,Flask在程序文件夾中的templates子文件夾中尋找模板。
Flask提供的render_template()函數把Jinja2模板引擎集成到了程序中。第一個參數是模板的文件名。隨後的參數都是鍵值對,表示模板中變量對應的真實值。在這段代碼中,第二個模板收到一個名爲name的變量。