在今天,Python裡有很多開發框架用來幫助你輕鬆創建web應用。web開發框架存在的意義就在於可以快速便捷的構建應用,而不用去在意那些沒必要的技術細節(協議、報文、數據結構)。
到2020年為止,基於Python創建的的web應用已經非常多了,國外知名的有youtube.com、instagram、reditt、國內有知乎、豆瓣等等。這些網站分別用到了不同的web框架來實現的,我們今天會一一講到。
Django
Django應該是Python最知名、最有代表性的Web框架了。它的名字來自於Django Reinhardt,一位法國作曲家和吉他演奏家。在2000年初有一個報社的兩位程序員為了給報社的報紙開發線上應用,開始用 Python編寫網站,最後把他們的工作總結出一套開源框架,就是今天的Django了。
Django遵循了MVC開發模式,並將這個模式命名為MTV(MTV模式是Python中獨有的)
- M Model(數據模型,用於後端數據庫模型定義和處理模塊)
- T Templates(模版,用於前端顯示信息)
- V View(視圖,用於接收客戶端請求、處理Model、渲染返回信息給客戶端等)
Django的優點和缺點
優點:
- 一站式開發解決方案,擰包入住
- 各種組件集成高度成熟,配置齊全
- 用戶模型、權限認證體系健全
- ORM數據庫管理功能簡單方便
- 自帶後臺管理功能
缺點:
- 配置相對複雜
- 簡單應用採用Django有一種殺雞用牛刀的感覺
Django安裝和初始化
Django下載方式有兩種:
1:通過pip直接安裝
<code>pip install Django==3.0.3/<code>
2:通過源碼下載並安裝
<code>git clone https://github.com/django/django.git/<code>
安裝之後通過startproject參數創建一個新的django項目 test_django/
<code>django-admin.py startproject test_django/<code>
cd test_django進入項目路徑輸入啟動服務命令即可啟動一個最簡單的django服務。
<code>python manage.py runserver/<code>
最後訪問下默認路徑 http://127.0.0.1:8000 看看django項目啟動的效果。
啟動成功,現在可以編寫你的Django代碼了。
Flask
如果說Django是大而全的方案代表,那麼Flask就是小而精的方案代表。
Flask是基於Werkzeug工具箱編寫的輕量級web開發框架,它主要面向需求簡單,項目週期短的Web小應用。
Flask這個框架相對比較靈活,核心思想是Flask只完成基本的功能,別的功能都是靠各種第三方插件來完成的,實現了模塊高度化定製。
常用的Flask插件如下:
- Flask-SQLalchemy:操作數據庫;
- Flask-migrate:管理遷移數據庫;
- Flask-Mail:郵件;
- Flask-WTF:表單;
- Flask-script:插入腳本;
- Flask-Login:認證用戶狀態;
- Flask-RESTful:開發REST API的工具;
- Flask-Bootstrap:集成前端Twitter Bootstrap框架;
- Flask-Moment:本地化日期和時間;
Flask的兩個主要核心應用是Werkzeug和模板引擎Jinja,除此以外,別的都是可以自由組裝的,適合有潔癖的程序員。
Flask優缺點
優點
- 項目結構和配置簡單
- 組件可以自由拆裝
- 小項目或臨時性項目比較適用
缺點
- 組件高度自定義帶來的就是各種組件之間的兼容性問題嚴重大型應用不適合,例如藍圖(blueprint)機制跟Django的url配置比起來其實差得很遠
Flask安裝
我們通過pip直接安裝
<code>pip install flask/<code>
在任意位置新建一個py文件,hello.py 。
<code>from flask import Flaskapp = Flask(__name__)@app.route("/")def hello(): return "Hello World!"if __name__ == "__main__": app.run()/<code>
輸入啟動命令
<code>python hello.py* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)/<code>
最後訪問默認地址 http://127.0.0.1:5000 打開flask默認啟動頁面。
Tornado
嚴格意義上來說Tornado不是一個Web框架,而是一個基於Python實現的異步處理框架,只是自帶了WSGI處理相關的功能。
tornado和Flask一樣,除了基本的Web處理功能和模版之外,其他功能組件都需要自行拼裝。
tornado的優缺點
優點:
- 短小精悍,性能比較好,不依賴Python多進程/多線程
- 支持異步非阻塞IO處理方式
- 支持websocket
缺點:
- 過於精簡,只適用於純接口化服務或者小型網站應用
Tornado安裝
同樣使用pip進行安裝。
<code>pip install tornado/<code>
新建一個hello.py 代碼文件。
<code>import tornado.webimport tornado.ioloopclass IndexHandler(tornado.web.RequestHandler): def get(self): self.write('hello world')if __name__ == '__main__': # 創建應用對象 app = tornado.web.Application([(r'/',IndexHandler)]) # 綁定監聽端口 app.listen(8888) # 啟動web程序 tornado.ioloop.IOLoop.current().start()/<code>
最後執行 python hello.py啟動tornado服務,通過http://127.0.0.1:8888訪問初始化頁面
以上三種是Python開發中經常使用到的Web框架,還有一些不是那麼常用的也一併給大家簡單介紹一下。
TurboGears
據說豆瓣早期就是基於該框架進行開發的。
TurboGears是在幾個著名的Python項目上組裝搭建起來的一個框架,由SQLAlchemy,WebOb,Repoze,Genshi組成。
在某種意義上,TurboGears是將多個開源組件粘合在一起。和Django同樣採用MVC架構。
TurboGears的優點
- 支持聚合
- 強大的對象關係映射器
- 事務系統支持多數據庫間事務
- 多數據庫支持
- 以可重用的代碼片段為模板
- 具有很多的靈活性,可以對接非標準組件
- 支持分片
- 模板系統使設計師的設計更輕鬆
Bottle
Bottle和Flask一樣,也是一個輕量級的Web開發框架。
它不依賴於Python標準庫外的任何庫。於2009年被創造出來,它僅由包含模板、路由和一個WSGI抽象層的最小工具開始。對於程序員想尋找一個最輕量級的WSGI服務是一個很好的選擇,用它可以最快速度的創建一個Web服務。
Bootle優點
- 超輕量級
- 內建模板引擎和對Jinja2,Mako和Cheetah的支持
總結
今天給大家介紹了各種Python的Web開發框架,我個人常用的框架主要包括Django、Flask、Tornado。別的框架涉獵較少,也是因為流行度和易用性的關係。
針對於最常用的三種框架,我給大家一個使用建議:
- 正式項目、大型項目,確定需要長期開發和維護的項目建議選擇Django,一勞永逸,不用考慮太多。
- 小型項目、臨時性的項目,不怕折騰的,可以選擇Flask。
- 小型項目、臨時性項目或者一些簡單的接口服務,可以選擇Tornado,因為Tornado天生支持異步,所以很多需要做異步IO服務的也可以選擇Tornado,另外Django3.0之後也開始全面支持異步了,建議大家觀望。
歡迎關注我 “紙飛機編程”,獲取更多有趣的Python編程信息。
閱讀更多 紙飛機編程 的文章