為了理解 Flask框架是如何抽象出Web開發中的共同部分,我們先來看看Web應用程序的一般流程。對于Web應用來說,當客戶端想要獲取動態資源 時,就會發起一個HTTP請求(比如用瀏覽器訪問一個 URL),Web應用程序會在后臺進行相應的業務處理,(從數據庫或者進行一些計算操作等)取出用戶需要的數據,生成相應的HTTP響應(當然,如果訪問靜態資源,則直接返回資源即可,不需要進行業務處理)。整個處理過程如下圖所示:
實際應用中, 不同的請求可能會調用相同的處理邏輯 。這里有著相同業務處理邏輯的 HTTP 請求可以用一類 URL 來標識。比如論壇站點中,對于所有的獲取Topic內容的請求而言,可以用 topic// 這類URL來表示,這里的 topic_id 用以區分不同的topic。接著在后臺定義一個 get_topic(topic_id) 的函數,用來獲取topic相應的數據,此外還需要建立URL和函數之間的一一對應關系。這就是Web開發中所謂的 路由分發 ,如下圖所示: Flask底層使用 werkzeug 來做路由分發,代碼寫起來十分簡單,如下:
通過業務邏輯函數拿到數據后,接下來需要根據這些數據生成HTTP響應(對于Web應用來說,HTTP響應一般是一個HTML文件)。Web開發中的一般做法是提供一個HTML模板文件,然后將數據傳入模板,經過渲染后得到最終需要的HTML響應文件。
一種比較常見的場景是, 請求雖然不同,但響應中數據的展示方式是相同的 。仍以論壇為例,對不同topic而言,其具體topic content雖然不同,但頁面展示的方式是一樣的,都有標題攔,內容欄等。也就是說,對于 topic 來說,我們只需提供一個HTML模板,然后傳入不同topic數據,即得到不同的HTTP響應。這就是所謂的 模板渲染 ,如下圖所示: Flask 使用 Jinja2 模板渲染引擎來做模板渲染,代碼如下:
總結一下,Flask處理一個請求的流程就是,首先根據 URL 決定由那個函數來處理,然后在函數中進行操作,取得所需的數據。再將數據傳給相應的模板文件中,由Jinja2 負責渲染得到 HTTP 響應內容,然后由Flask返回響應內容。
Flask也被稱為 “microframework” ,因為它使用簡單的核心,用 extension。增加其他功能。
Flask沒有默認使用的數據庫、窗體驗證工具。然而,Flask保留了擴增的彈性,可以用Flask-extension加入這些功能:ORM、窗體驗證工具、文件上傳、各種開放式身份驗證技術。最新版本為0.11。 Flask是一個使用 Python 編寫的輕量級 Web 應用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎則使用 Jinja2 。Flask使用 BSD 授權。 flask默認端口是5000。 Flask簡單易學,下面是Flask版的hello world(hello.py):
from flask import Flaskapp = Flask(__name__)@app.route("/")def hello(): return "Hello World!"if __name__ == "__main__": app.run()重定向和錯誤 你可以用 redirect() 函數把用戶重定向到其它地方。放棄請求并返回錯誤代碼,用 abort()函數。這里是一個它們如何使用的例子:from flask import abort, redirect, [email protected]('/')def index(): return redirect(url_for('login'))@app.route('/login')def login(): abort(401) this_is_never_executed()這是一個相當無意義的例子因為用戶會從主頁重定向到一個不能訪問的頁面 (401 意味著禁止訪問),但是它展示了重定向是如何工作的。
默認情況下,錯誤代碼會顯示一個黑白的錯誤頁面。如果你要定制錯誤頁面, 可以使用 errorhandler() 裝飾器:
from flask import [email protected](404)def page_not_found(error): return render_template('page_not_found.html'), 404注意 render_template() 調用之后的 404 。這告訴 Flask,該頁的錯誤代碼是 404 ,即沒有找到。默認為 200,也就是一切正常。
是JSON格式的數據,是經過Flask框架的 jsonify模塊格式化過的數據。return jsonify(nodes=data[0], links=data[1])學習參考: 【1】快速入門:http://docs.jinkan.org/docs/flask/quickstart.html 【2】官網:http://flask.pocoo.org/ 【3】圖文快速講解: http://www.open-open.com/lib/view/open1477879623923.html
新聞熱點
疑難解答