1、簡介web
Flask是一個基於Python的web框架,它的設計目的是提供Web開發所需的最小功能子集。Flask沒有綁定諸如數據庫查詢或者表單處理等功能庫,以及它們所組成的整個生態系統。它傾向於對這些功能的實現方式不作任何限定數據庫
安裝 Flask 最便捷的方式是使用虛擬環境。虛擬環境是 Python 解釋器的一個私有副本,在flask
這個環境中你能夠安裝私有包,並且不會影響系統中安裝的全局 Python 解釋器瀏覽器
下面是在pycharm中建立Flask項目服務器
全部 Flask 程序都必須建立一個程序實例。Web 服務器使用一種名爲 Web 服務器網關接口(Web Server Gateway Interface,WSGI)的協議,把接收自客戶端的全部請求都轉交給這cookie
個對象處理。程序實例是 Flask 類的對象session
2、URLapp
Web 瀏覽器把請求發送給 Web 服務器,Web 服務器再把請求發送給 Flask程序實例。程序實例須要知道對每一個 URL 請求運行哪些代碼,因此保存了一個 URL 到Python 函數的映射關係。處理 URL 和函數之間關係的程序稱爲路由,在Flask程序中,使用程序實例提供的 app.route 修飾器,把修飾的函數註冊爲路由框架
#尖括號中的內容就是動態部分,任何能匹配靜態部分的 URL 都會映射到這個路由上函數
@app.route('/user/<name>') def user(name): return '<h1>Hello, %s!</h1>' % name
3、視圖函數
Hello_word() 這樣的函數稱爲視圖函數(view function)。視圖函數返回的響應能夠是包含HTML 的簡單字符串,也能夠是複雜的表單
#coding=utf-8 from flask import Flask #將構造函數的 name 參數傳給 Flask 程序,Flask 用這個參數決定程序的根目錄 app = Flask(__name__) #使用程序實例提供的 app.route 修飾器,把修飾的函數註冊爲路由 @app.route('/') def hello_world(): return 'Hello World!' if __name__ == '__main__': app.run()
執行效果
4、請求-響應
Flask 從客戶端收到請求時,要讓視圖函數能訪問一些對象,這樣才能處理請求。請求對象就是一個很好的例子,它封裝了客戶端發送的 HTTP 請求。要想讓視圖函數可以訪問請求對象,一個顯而易見的方式是將其做爲參數傳入視圖函數,不過這會致使程序中的每一個視圖函數都增長一個參數。除了訪問請求對象,若是視圖函數在處理請求時還要訪問其餘對象,狀況會變得更糟。爲了不大量無關緊要的參數把視圖函數弄得一團糟, Falsk 使用上下文讓特定的變量在一個線程中全局可訪問,與此同時卻不會干擾其餘線程
變量名 |
上下文 |
說明 |
current_app |
程序上下文 |
當前激活程序的程序實例 |
g |
程序上下文 |
處理請求時用做臨時存儲的對象。每次請求都會重設這個變量 |
request |
請求上下文 |
請求對象,封裝了客戶端發出的 HTTP 請求中的內容 |
session |
請求上下文 |
用戶會話,用於存儲請求之間須要「記住」的值的詞典 |
Flask 在分發請求以前激活(或推送)程序和請求上下文,請求處理完成後再將其刪除。程
序上下文被推送後,就能夠在線程中使用 current_app 和 g 變量。相似地,請求上下文被
推送後,就可使用 request 和 session 變量
Flask 提供了註冊通用函數的功能,註冊的函數可在請求被分發到視圖函數以前或以後
調用。
請求鉤子使用修飾器實現。Flask 支持如下 4 種鉤子
before_first_request • :註冊一個函數,在處理第一個請求以前運行。
before_request • :註冊一個函數,在每次請求以前運行。
after_request • :註冊一個函數,若是沒有未處理的異常拋出,在每次請求以後運行。
teardown_request • :註冊一個函數,即便有未處理的異常拋出,也在每次請求以後運行
鉤子函數和視圖函數之間共享數據通常使用上下文全局變量 g 。例如, before_
request 處理程序能夠從數據庫中加載已登陸用戶,並將其保存到 g.user
Flask 調用視圖函數後,會將其返回值做爲響應的內容, Flask 視圖函數還能夠返回 Response 對象, 下例建立了一個響應對象,而後設置了 cookie:
from flask import make_response @app.route('/') def index(): response = make_response('<h1>This document carries a cookie!</h1>') response.set_cookie('answer', '42') return response
重定向的特殊響應類型, 沒有頁面文檔,只告訴瀏覽器一個新地址用以加載新頁面。重定向常常在 Web 表單中使用, 重定向響應可使用返回值生成,也可在 Response 對象中設定。因爲使用頻繁,Flask 提供了 redirect() 輔助函數
from flask import redirect @app.route('/') def index(): return redirect('http://www.example.com')
abort 函數生成,用於處理錯誤
若是 URL 中動態參數 id 對應的用戶不存在,就返回狀態碼 404:
from flask import abort @app.route('/user/<id>') def get_user(id): user = load_user(id) if not user: abort(404) return '<h1>Hello, %s</h1>' % user.name
學習過程依據《Flask+Web開發:基於Python的Web應用開發實戰》
電子版pdf(含目錄)地址
連接:https://pan.baidu.com/s/1f43AUHydzp5EOEv6zjYv2A 密碼:xi71