Flask 框架簡介
Python 中存在眾多的 Web 開發(fā)框架:Flask、Django、Tornado、Webpy、Web2py、Bottle、Pyramid、Zope2 等。近幾年較為流行的,大概也就是 Flask 和 Django 了。我們以這些 Web 開發(fā)框架作為關(guān)鍵字,在慕課網(wǎng)中搜索相關(guān)課程,查詢到的課程數(shù)量如下所示:
Web 開發(fā)框架 | 相應的課程數(shù)量 |
---|---|
Django | 17 |
Flask | 15 |
Tornado | 2 |
其余的框架 | 0 |
由此可見,Django 和 Flask 確實是 Python 領(lǐng)域中最主流的兩個 Web 開發(fā)框架,本節(jié)課我們就來介紹下 Flask 框架的特點,并簡單了解下 Flask 與 Django 框架的優(yōu)缺點對比。
1. Flask 簡介
Flask 是一個輕量級的 Web 框架,使用 Python 語言編寫,較其他同類型框架更為靈活、輕便且容易上手,小型團隊在短時間內(nèi)就可以完成功能豐富的中小型網(wǎng)站或 Web 服務的實現(xiàn)。
Flask 具有很強的定制性,用戶可以根據(jù)自己的需求來添加相應的功能,在保持核心功能簡單的同時實現(xiàn)功能的豐富與擴展,其強大的插件庫可以讓用戶實現(xiàn)個性化的網(wǎng)站定制,開發(fā)出功能強大的網(wǎng)站。
2. Flask 的特點
2.1 微框架
Flask 是一個 Python 實現(xiàn)的 Web 開發(fā)微框架,但是這個“微”并不代表著 Flask 功能比較簡陋、有所欠缺。微框架中的 “微” 意味著:
- Flask 旨在保持核心簡單而易于擴展;
- Flask 不會替用戶做出太多決策,比如使用何種數(shù)據(jù)庫;
- Flask 的選項(比如使用何種模板引擎) 通常有多個,用戶很容易替換。
默認情況下,F(xiàn)lask 不包含數(shù)據(jù)庫抽象層、模板引擎、身份認證或其它任何已有多種庫可以勝任的功能,如下圖所示。然而,F(xiàn)lask 支持用擴展來給應用添加這些功能,應用程序可以很方便的集成這些擴展。眾多的擴展提供了數(shù)據(jù)庫集成、表單驗證、上傳處理、各種各樣的開放認證技術(shù)等功能。
2.2 約定優(yōu)于配置
設計不好的框架通常需要多個配置文件,每一個都有許多設置選項,程序員需要記憶大量的參數(shù)配置。
但是 Flask 遵循約定優(yōu)于配置(Convention Over Configuration),也稱作按約定編程是一種軟件設計范式。目的在于減少軟件開發(fā)人員所需要做出的決定的數(shù)量,從而將開發(fā)變得簡單,而又不失去其中的靈活性,開發(fā)人員僅僅需要規(guī)定應用中不符合約定的部分。
Flask 存在有眾多的配置選項,但是在初始狀況下,它們都有一個常用的默認值,并會遵循一些慣例。 例如:按照慣例,模板和靜態(tài)文件分別存儲在應用 Python 源代碼樹下的子目錄 templates 和 static 里。雖然這個配置可以修改,但通常不必這么做,尤其是在剛開始學習的時候。
3. Django 簡介
Django 是一個開放源代碼的 Web 應用框架,由 Python 寫成,它最初是被開發(fā)來用于管理一些以新聞內(nèi)容為主的網(wǎng)站,即是CMS(內(nèi)容管理系統(tǒng))軟件。
Django 是一個遵循 MVC 設計模式的框架。MVC 是 Model、View、Controller 三個單詞的簡寫,分別代表模型、視圖、控制器。Django 也是一個 遵循 MVC 設計模式的框架。MTV 是 Model、Template、View 三個單詞的簡寫,分別代表模型、模版、視圖 。
4. Django 的特點
Django 是一個 Python 實現(xiàn)的 Web 開發(fā)重框架。重框架中的 “重” 意味著,Django 除了實現(xiàn) Web 框架的基本功能,內(nèi)置了大量的模塊,Django 的架構(gòu)如下所示:
與 Flask 的架構(gòu)相比,兩者的區(qū)別很明顯:
- Flask 僅包含最核心的框架功能,沒有集成數(shù)據(jù)庫訪問、模板引擎等功能;
- Django 不僅包含最核心的框架功能,還包含了數(shù)據(jù)庫訪問、模板引擎等功能。
Django 集成的功能模塊包括:
對象關(guān)系映射 (ORM, Ojbect Relation Model)
以 Python 類形式定義數(shù)據(jù)模型,ORM 將模型與關(guān)系數(shù)據(jù)庫關(guān)聯(lián),得到一個非常容易使用的數(shù)據(jù)庫 API,同時也可以在 Django 中使用原始的 SQL 語句訪問數(shù)據(jù)庫。
表單處理
可以方便的生成各種表單模型,實現(xiàn)表單的有效性檢驗,可以方便的從定義的模型實例生成相應的表單。
模板引擎
Django 模板用于編寫 html 代碼,更快更方便的完成頁面開發(fā),再通過在視圖中渲染模板,將生成最終的 html 字符串返回給客戶端瀏覽器。
后臺管理系統(tǒng)
Django 自帶一個 ADMIN site,類似于內(nèi)容管理系統(tǒng),不需要再花大量的工作來創(chuàng)建用戶和內(nèi)容管理系統(tǒng)。
5. Flask 與 Django 的比較
5.1 兩個框架的區(qū)別
上面我們簡單介紹了 Flask 和 Django 這兩個 Web 開發(fā)框架,下面,我給大家總結(jié)一下這兩個框架的區(qū)別到底在哪里:
其實兩者最主要區(qū)別在于:Django 功能大而全,F(xiàn)lask 只包含基本的功能。
Django 采用一站式解決的思路,Django 集成有模板、表單、路由、認證、基本的數(shù)據(jù)庫管理等內(nèi)建功能,開發(fā)者不用在選擇應用的基礎(chǔ)設施上花費大量時間。
Django 就像是一個裝潢好的房子(如下圖所示),它提供了各種家具,直接入住即可。
Flask 相對于 Django 而言是輕量級的 Web 框架。和 Django 不同,F(xiàn)lask 只提供了最核心的功能,輕巧、簡潔,通過定制第三方擴展來實現(xiàn)具體功能。
默認情況下,不包含數(shù)據(jù)庫抽象、用戶認證、表單驗證、發(fā)送郵件等其它 Web 框架經(jīng)常包含的功能。Flask 依賴用各種靈活的擴展(比如郵件 Flask Mail,用戶認證 Flask Login,數(shù)據(jù)庫 Flask SQLAlchemy)來給Web應用添加額外功能。
Flask 就像是一個沒有裝潢的房子(如下圖所示),用戶需要自己選擇各種家具才可以入住。
5.2 新手入門推薦
Flask 是一個輕量級的 Web 框架,只提供核心服務,較其他同類型框架更為輕便且容易上手,適用于小型團隊在短時間內(nèi)就可以完成功能豐富的中小型網(wǎng)站。與之相比,Django 是一個重量級的 Web 框架,內(nèi)置許多常用的擴展,這些功能是由官方和社區(qū)共同維護的,其健壯性高,有利于保障項目質(zhì)量。
推薦新手學習 Flask 框架,可以先從 Flask 開始,后使用 Django 重構(gòu)。因為如果直接上 Django,作為新手,面對 Django 內(nèi)置的各種繁雜功能產(chǎn)生很多疑惑。
就如同搭積木,如果直接給你一個搭好的模型,再拆開后(逆向過程),讓你指出每塊積木的作用,你可能會有疑惑。但是讓你親自一步步去搭好后(正向過程),再去拆解模型,你對每塊積木的都會有不錯的了解。
Flask 開發(fā)就像是這個正向過程,自己一步一步去集成想要的擴展,完善網(wǎng)站,每一步都親自動手做一遍,有助于理解 Web 開發(fā)的很多概念。Django 開發(fā)就像是逆向過程,Django 已經(jīng)幫你集成了許多常用的擴展,用戶要做的去學習這些擴展的使用。
6. 本課程所需的前置基礎(chǔ)知識
Flask 是一個用于 Web 開發(fā)的框架,學習本課程之前,需要掌握一定的 Web 開發(fā)基礎(chǔ),具體包括如下知識點:
- Python 的基本語法;
- Html 的常用標簽;
- Css 的基本知識;
- Javascript 的基本語法。
本課程面向 Python 初學者,Python 初學者在學習完 Python 基本語法后,希望用 Python 完成一個具體的項目,用于開發(fā)一個網(wǎng)站。
7. 小結(jié)
本節(jié)介紹了 Python Web 開發(fā)的兩個框架:Flask 和 Django,并對其進行了對比,使用思維導圖總結(jié)如下: