1 瞭解框架前端
Flask做爲Web框架,它的做用主要是爲了開發Web應用程序。那麼咱們首先來了解下Web應用程序。Web應用程序 (World Wide Web)誕生最初的目的,是爲了利用互聯網交流工做文檔。數據庫
1.1 一切從客戶端發起請求開始。django
全部Flask程序都必須建立一個程序實例。flask
當客戶端想要獲取資源時,通常會經過瀏覽器發起HTTP請求。瀏覽器
此時,Web服務器使用一種名爲WEB服務器網關接口的WSGI(Web Server Gateway Interface)協議,把來自客戶端的請求都交給Flask程序實例。緩存
Flask使用Werkzeug來作路由分發(URL請求和視圖函數之間的對應關係)。根據每一個URL請求,找到具體的視圖函數。服務器
在Flask程序中,路由通常是經過程序實例的裝飾器實現。經過調用視圖函數,獲取到數據後,把數據傳入HTML模板文件中,模板引擎負責渲染HTTP響應數據,而後由Flask返回響應數據給瀏覽器,最後瀏覽器顯示返回的結果。app
1.2 客戶端不必定是瀏覽器,也能夠是PC軟件、手機APP、程序框架
根據服務器端的工做,將其分爲兩部分:tcp
服務器:與客戶端進行tcp通訊,接收、解析、打包、發送http格式數據
業務程序:根據解析後的請求數據執行邏輯處理,造成要返回的數據交給服務器
服務器與Python業務程序的配合使用WSGI協議。
1.3 框架的輕重
重量級的框架:爲方便業務程序的開發,提供了豐富的工具、組件,如Django
輕量級的框架:只提供Web框架的核心功能,自由、靈活、高度定製,如Flask、Tornado
2 認識Flask
2.1 簡介
Flask誕生於2010年,是Armin ronacher(人名)用Python語言基於Werkzeug工具箱編寫的輕量級Web開發框架。它主要面向需求簡單的小應用。
Flask自己至關於一個內核,其餘幾乎全部的功能都要用到擴展(郵件擴展Flask-Mail,用戶認證Flask-Login),都須要用第三方的擴展來實現。好比能夠用Flask-extension加入ORM、窗體驗證工具,文件上傳、身份驗證等。Flask沒有默認使用的數據庫,你能夠選擇MySQL,也能夠用NoSQL。其 WSGI 工具箱採用 Werkzeug(路由模塊) ,模板引擎則使用 Jinja2 。
能夠說Flask框架的核心就是Werkzeug和Jinja2。
Python最出名的框架要數Django,此外還有Flask、Tornado等框架。雖然Flask不是最出名的框架,可是Flask應該算是最靈活的框架之一,這也是Flask受到廣大開發者喜好的緣由。
2.2 與Django對比
django提供了:
django-admin快速建立項目工程目錄
manage.py 管理項目工程
orm模型(數據庫抽象層)
admin後臺管理站點
緩存機制
文件存儲系統
用戶認證系統
而這些,flask都沒有,都須要擴展包來提供
2.3 Flask擴展包:
Flask-SQLalchemy:操做數據庫;
Flask-migrate:管理遷移數據庫;
Flask-Mail:郵件;
Flask-WTF:表單;
Flask-script:插入腳本;
Flask-Login:認證用戶狀態;
Flask-RESTful:開發REST API的工具;
Flask-Bootstrap:集成前端Twitter Bootstrap框架;
Flask-Moment:本地化日期和時間;
3 安裝使用Flask
1. 安裝flask
pip3 install flask
2. 第一個Flask程序
Flask程序運行過程:
全部Flask程序必須有一個程序實例。
Flask調用視圖函數後,會將視圖函數的返回值做爲響應的內容,返回給客戶端。通常狀況下,響應內容主要是字符串和狀態碼。
當客戶端想要獲取資源時,通常會經過瀏覽器發起HTTP請求。此時,Web服務器使用WSGI(Web Server Gateway Interface)協議,把來自客戶端的全部請求都交給Flask程序實例。WSGI是爲 Python 語言定義的Web服務器和Web應用程序之間的一種簡單而通用的接口,它封裝了接受HTTP請求、解析HTTP請求、發送HTTP,響應等等的這些底層的代碼和操做,使開發者能夠高效的編寫Web應用。
程序實例使用Werkzeug來作路由分發(URL請求和視圖函數之間的對應關係)。根據每一個URL請求,找到具體的視圖函數。 在Flask程序中,路由的實現通常是經過程序實例的route裝飾器實現。route裝飾器內部會調用add_url_route()方法實現路由註冊。
調用視圖函數,獲取響應數據後,把數據傳入HTML模板文件中,模板引擎負責渲染響應數據,而後由Flask返回響應數據給瀏覽器,最後瀏覽器處理返回的結果顯示給客戶端。
建立一個flask項目,而後建立app.py文件。
# 導入Flask類
from flask import Flask #Flask類接收一個參數__name__
app = Flask(__name__) # 裝飾器的做用是將路由映射到視圖函數index
@app.route('/') def index(): return 'Hello World'
# Flask應用程序實例的run方法啓動WEB服務器
if __name__ == '__main__': app.run()
啓動項目,在瀏覽器訪問,此時頁面上就會有Hello World。
3. Flask建立app對象
3.1 初始化參數
# 建立flask的應用對象; # __name__ flask以這個模塊所在的目錄爲總目錄,默認這個目錄中static爲靜態目錄,templates爲模板目錄
app = Flask(__name__, static_url_path='/static', # 訪問靜態資源的url前綴,默認爲static
static_folder='static', # 靜態文件的目錄,默認爲static
template_folder='templates', # 模板文件的目錄,默認爲templates
)
3.2 配置參數
# 配置參數的使用方式(開啓調試模式) # 1.使用配置文件 # app.config.from_pyfile("config.cfg") # 在項目下建立一個config.cfg文件,而後在裏面寫DEBUG=True
# 2.使用對象配置參數 # class Config(object): # DEBUG = True # app.config.from_object(Config)
# 3.直接操做config的字典對象 # app.config["DEBUG"] = True
3.3 在視圖讀取配置參數
# 2.使用對象配置參數 # class Config(object): # DEBUG = True # NAME = "test" # app.config.from_object(Config)
from flask import Flask, current_app # 讀取配置參數
# 1.直接從全局對象app的config字典中取值
# print(app.config.get("NAME"))
# 2. 經過current_app獲取參數
# print(current_app.config.get("NAME"))
3.4 app.run的參數
# 啓動Flask程序
app.run() # 默認127.0.0.1
# app.run(host="192.168.1.1", port=5000) # 使用電腦ip
# app.run(host="0.0.0.0", port=5000, debug=True) # 配置host和port。設置0.0.0.0時均可以訪問;能夠在這裏設置調試模式