從零開始搭建論壇(三):Flask框架簡單介紹

前面兩篇文章中咱們已經瞭解 Web(HTTP)服務器,Web應用程序,Web框架,WSGI這些 Python Web 開發中的概念。咱們知道,Web框架經過將不一樣Web應用程序中的共性部分給抽象出來,提供一系列通用的接口,從而避免開發者作重複性工做,讓其將精力放在業務相關的實現。html

接下來一塊兒來看一個具體的 Web 框架,這裏選擇 Flask,由於它是一個年輕充滿活力的微框架,有着衆多的擁護者,文檔齊全,社區活躍度高。咱們的論壇項目 就使用了該框架。python

Flask 框架

爲了理解 Flask 框架是如何抽象出Web開發中的共同部分,咱們先來看看Web應用程序的通常流程。對於Web應用來講,當客戶端想要獲取動態資源時,就會發起一個HTTP請求(好比用瀏覽器訪問一個 URL),Web應用程序會在後臺進行相應的業務處理,(從數據庫或者進行一些計算操做等)取出用戶須要的數據,生成相應的HTTP響應(固然,若是訪問靜態資源,則直接返回資源便可,不須要進行業務處理)。整個處理過程以下圖所示:git

實際應用中,不一樣的請求可能會調用相同的處理邏輯。這裏有着相同業務處理邏輯的 HTTP 請求能夠用一類 URL 來標識。好比論壇站點中,對於全部的獲取Topic內容的請求而言,能夠用 topic/<topic_id>/ 這類URL來表示,這裏的 topic_id 用以區分不一樣的topic。接着在後臺定義一個 get_topic(topic_id) 的函數,用來獲取topic相應的數據,此外還須要創建URL和函數之間的一一對應關係。這就是Web開發中所謂的路由分發,以下圖所示:github

Flask底層使用werkzeug來作路由分發,代碼寫起來十分簡單,以下:web

@app.route('/topic/<int:topic_id>/') 
def get_topic(topic_id):
    # Do some cal or read from database
    # Get the data we need.

經過業務邏輯函數拿到數據後,接下來須要根據這些數據生成HTTP響應(對於Web應用來講,HTTP響應通常是一個HTML文件)。Web開發中的通常作法是提供一個HTML模板文件,而後將數據傳入模板,通過渲染後獲得最終須要的HTML響應文件。數據庫

一種比較常見的場景是,請求雖然不一樣,但響應中數據的展現方式是相同的。仍以論壇爲例,對不一樣topic而言,其具體topic content雖然不一樣,但頁面展現的方式是同樣的,都有標題攔,內容欄等。也就是說,對於 topic 來講,咱們只需提供一個HTML模板,而後傳入不一樣topic數據,即獲得不一樣的HTTP響應。這就是所謂的模板渲染,以下圖所示:flask

Flask 使用 Jinja2 模板渲染引擎來作模板渲染,代碼以下:瀏覽器

@app.route('/topic/<int:topic_id>/')
def get_topic(topic_id):
    # Do some cal or read from database
    # Get the data we need.
    return render_template('path/to/template.html', data_needed)

總結一下,Flask處理一個請求的流程就是,首先根據 URL 決定由那個函數來處理,而後在函數中進行操做,取得所需的數據。再將數據傳給相應的模板文件中,由Jinja2 負責渲染獲得 HTTP 響應內容,而後由Flask返回響應內容。服務器

Flask 入門

關於 Flask 框架的學習,不建議直接讀官網文檔,雖然這是一手的權威資料,但並不適合初學者入手。這裏推薦幾個學習資料,能夠幫助新手很快的入門:app

匯智網flask框架教程:一個很是適合入門的精簡教程,主要分爲七部分:

  • 快速入門

  • 路由:URL 規則與視圖函數

  • 請求、應答與會話

  • 上下文對象:Flask 核心機制

  • 模版:分離數據與視圖

  • 訪問數據庫:SQLAlchemy簡介

  • 藍圖:Flask應用組件化

教程簡練地總結了 Flask 最核心的內容,而且還提供了一個簡單的在線練習環境,方便一邊學習理論一邊動手實踐。

此外,麥子學院也有一個 Flask入門 視頻教程,一共8小時的視頻教程,涵蓋flask web 開發的方方面面,包括環境的搭建,flask 語法介紹,項目結構的組織,flask 全球化,單元測試等內容。視頻做者有 17 年軟件開發經驗,曾任微軟深圳技術經理及多家海外機構擔任技術顧問,夠牛!視頻講的也確實不錯。

若是上面兩個不能知足你,那麼還能夠看 Flask Web開發:基於Python的Web應用開發實戰 這本有着 8.6 評分的書,相信沒看完就躍躍欲試想寫點什麼了。這麼優秀的框架,Github 上固然也有 awesome-flask了,想深刻學習flask的話,這裏不失爲一個好的資源帖。

本篇大概談了下 Flask 的路由分發和模版渲染,下篇咱們會繼續講Flask使用中的一些問題。

博客地址

更多閱讀

What is the purpose of Flask's context stacks?
Flask 的 Context 機制
Flask、Django、Pyramid三個框架的對比

相關文章
相關標籤/搜索