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