Python常見web框架匯總

目前,有非常多的Python框架,用來幫助你更輕松的創(chuàng)建web應(yīng)用。這些框架把相應(yīng)的模塊組織起來,使得構(gòu)建應(yīng)用的時(shí)候可以更快捷,也不用去關(guān)注一些細(xì)節(jié)(例如socket和協(xié)議),所以需要的都在框架里了。接下來我們會(huì)介紹不同的選項(xiàng)。

Python發(fā)源于八十年代后期。開發(fā)者是Centrum Wiskunde & Informatica的Guido van Rossum,這是位于荷蘭阿姆斯特丹科學(xué)園區(qū)的一個(gè)數(shù)學(xué)和計(jì)算機(jī)科學(xué)研究中心。之后Van Rossum一直是Python開發(fā)很有影響的人物。事實(shí)上,社區(qū)成員給了他一個(gè)榮譽(yù)稱號(hào):終生仁慈獨(dú)裁者(BDFL)。

經(jīng)過初期的不起眼,Python已經(jīng)成為互聯(lián)網(wǎng)最流行的服務(wù)端編程語言之一。根據(jù)W3Techs的統(tǒng)計(jì),它被用于很多的大流量的站點(diǎn),超過了ColdFusion, PHP, 和ASP.NET。其中超過98%的站點(diǎn)運(yùn)行的是Python 2.0,只有1%多一點(diǎn)的站點(diǎn)運(yùn)行3.0。

框架讓開發(fā)更輕松

今天,有著大量的Python框架,它們可以讓web應(yīng)用的開發(fā)更輕松。這些框架把不同的模塊集成在一起,讓你更快的構(gòu)架程序,而不用關(guān)注一些細(xì)節(jié)(例如socket和協(xié)議),框架提供了需要的所有功能。

作為分成兩部分的系列文章的第一部分,我們會(huì)介紹一些最流行的Python框架。雖然大部分現(xiàn)代的web框架都運(yùn)行在服務(wù)端,也有一些框架開始嘗試與客戶端代碼結(jié)合,可以在客戶端運(yùn)行(例如Skulpt和Trinket)。Python框架通常分為全棧框架和非全??蚣堋?a target="_blank" rel="nofollow">全??蚣?/a>設(shè)計(jì)從用戶體驗(yàn)到數(shù)據(jù)庫的所有技術(shù),非全??蚣軇t并不包含整個(gè)開發(fā)的全部技術(shù)。

此外還有一種微框架,也屬于非全??蚣?,但是更輕量級(jí)。有的情況下,微框架是比較適合的,有時(shí)又適合使用全棧框架。在文章的第二部分我們會(huì)對(duì)全??蚣芎臀⒖蚣茏鲆粋€(gè)比較。

Django

Django恐怕是最有代表性的Python框架了。它是一個(gè)遵循MMVC架構(gòu)模式的開源框架。它的名字來自Django Reinhardt,一個(gè)法國作曲家和吉他演奏家,很多人認(rèn)為他是歷史上最偉大的吉他演奏家。位于堪薩斯洲的Lawrence城的Lawrence Journal-World報(bào)社有兩位程序員,Adrian Holovaty和Simon Willison,他們?cè)?003的時(shí)候開發(fā)出了Django,用于給報(bào)紙開發(fā)web程序。

Django內(nèi)置了模板引擎,同時(shí)也通過OOTB來支持流行的Jinja2引擎。它還支持基于正則的URL分發(fā),可以通過簡單的URL來完成復(fù)雜的映射。

Django的優(yōu)勢(shì)之一是只需要單獨(dú)的安裝包來安裝。其他的一些類似的框架需要下載很多組件才能開始工作。而且,Django還有完善的保持更新的文檔,對(duì)于開源項(xiàng)目來說這通常是短板。它是一個(gè)健壯的框架,很好的集成了很多來自社區(qū)的插件和擴(kuò)展。項(xiàng)目背后的社區(qū)看上去也組織的很好,這從它非常完善的文檔和教程就可以看出來。

我學(xué)習(xí)的第一個(gè)框架就是django,方便入門,上手也比較快。個(gè)人覺得django的model不好用,主要是跨庫聯(lián)表不友好。
django官網(wǎng)

創(chuàng)建一個(gè)項(xiàng)目:

$ pip install django
$ django-admin startproject djdemo                                                   
 cd djdemo                                                                                                                               
$ django-admin startapp djapp                                                   
$ tree -L 3             
.
├── djapp
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
├── djdemo
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-37.pyc
│   │   └── settings.cpython-37.pyc
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── manage.py

下面我給出我一個(gè)項(xiàng)目的Django的目錄結(jié)構(gòu)。是django的經(jīng)典目錄結(jié)構(gòu)形式:


django很簡單,Django生態(tài)很完備,基于django開發(fā),一般需要的功能,都可以找到已經(jīng)有的輪子。開發(fā)效率很高。django下的開發(fā)就是往框架中的填代碼。另外就是不夠靈活,太重。

django很多好用的腳手架

[django]
    check
    compilemessages
    createcachetable
    dbshell
    diffsettings
    dumpdata
    flush
    inspectdb
    loaddata
    makemessages
    makemigrations
    migrate
    runserver
    sendtestemail
    shell
    showmigrations
    sqlflush
    sqlmigrate
    sqlsequencereset
    squashmigrations
    startapp
    startproject
    test
    testserver

Django 優(yōu)秀資源大全

TurboGears

TurboGears是在幾個(gè)著名的Python項(xiàng)目上構(gòu)建起來的一個(gè)框架,如SQLAlchemy,WebOb,Repoze,Genshi。在某種意義上,TurboGears是將多個(gè)已經(jīng)建立的開放平臺(tái)粘合在一起。和Django一樣,它采用MVC架構(gòu)。它最近還包含一個(gè)“最小模式”,使其可以作為一個(gè)微框架。

TurboGears是由Kevin Dangoor在2005年開發(fā)的。他在當(dāng)年9月將其作為一個(gè)開源項(xiàng)目發(fā)布。2013年,項(xiàng)目開發(fā)人員遷移到支持Python 3,拋棄了他們?cè)?jīng)寫的Pylons代碼。TurboGears的優(yōu)點(diǎn)包括:

  • 支持聚合
  • 強(qiáng)大的對(duì)象關(guān)系映射器
  • 事務(wù)系統(tǒng)支持多數(shù)據(jù)庫間事務(wù)
  • 多數(shù)據(jù)庫支持
  • 以可重用的代碼片段為模板
  • 具有很多的靈活性,可以對(duì)接非標(biāo)準(zhǔn)組件
  • 支持分片
  • 模板系統(tǒng)使設(shè)計(jì)師的設(shè)計(jì)更輕松

TurboGears

TurboGears官網(wǎng)

安裝

$ pip install tg.devtools

$ gearbox --help
usage: gearbox [--version] [-v | -q] [--log-file LOG_FILE] [-h] [--debug]
               [--relative]

TurboGears2 Gearbox toolset

optional arguments:
  --version            show program's version number and exit
  -v, --verbose        Increase verbosity of output. Can be repeated.
  -q, --quiet          Suppress output except warnings and errors.
  --log-file LOG_FILE  Specify a file to log output. Disabled by default.
  -h, --help           Show this help message and exit.
  --debug              Show tracebacks on errors.
  --relative           Load plugins and applications also from current path.

Commands:
  help           print detailed help for another command
  makepackage    Creates a basic python package
  patch          Patches files by replacing, appending or deleting text.
  quickstart     Creates a new TurboGears2 project
  scaffold       Creates a new file from a scaffold template
  serve          Serves a web application that uses a PasteDeploy configuration file
  setup-app      Setup an application, given a config file
  tgext          Creates a tgext.* package

創(chuàng)建項(xiàng)目

$ gearbox quickstart tgdemo
// 會(huì)生成很多文件

.
├── MANIFEST.in
├── README.txt
├── __pycache__
│   └── setup.cpython-37.pyc
├── development.ini
├── migration
│   ├── env.py
│   ├── script.py.mako
│   └── versions
│       └── empty.txt
├── setup.cfg
├── setup.py
├── test.ini
├── tgdemo
│   ├── __init__.py
│   ├── config
│   │   ├── __init__.py
│   │   ├── app_cfg.py
│   │   ├── environment.py
│   │   └── middleware.py
│   ├── controllers
│   │   ├── __init__.py
│   │   ├── controller.py.template
│   │   ├── error.py
│   │   ├── root.py
│   │   └── secure.py
│   ├── i18n
│   │   └── ru
│   ├── lib
│   │   ├── __init__.py
│   │   ├── app_globals.py
│   │   ├── base.py
│   │   └── helpers.py
│   ├── model
│   │   ├── __init__.py
│   │   ├── auth.py
│   │   └── model.py.template
│   ├── public
│   │   ├── css
│   │   ├── favicon.ico
│   │   ├── fonts
│   │   ├── img
│   │   └── javascript
│   ├── templates
│   │   ├── __init__.py
│   │   ├── __pycache__
│   │   ├── about.xhtml
│   │   ├── data.xhtml
│   │   ├── environ.xhtml
│   │   ├── error.xhtml
│   │   ├── index.xhtml
│   │   ├── login.xhtml
│   │   ├── master.xhtml
│   │   └── template.xhtml.template
│   ├── tests
│   │   ├── __init__.py
│   │   ├── functional
│   │   └── models
│   └── websetup
│       ├── __init__.py
│       ├── bootstrap.py
│       └── schema.py
└── tgdemo.egg-info
    ├── PKG-INFO
    ├── SOURCES.txt
    ├── dependency_links.txt
    ├── entry_points.txt
    ├── not-zip-safe
    ├── requires.txt
    └── top_level.txt

22 directories, 48 files

上面??是按python包的方式生成的代碼形式,方便打包分發(fā)。

用戶只需要修改下面目錄中的代碼即可


TurboGears使用示例

 from wsgiref.simple_server import make_server
 from tg import expose, TGController, AppConfig

 class RootController(TGController):
      @expose()
      def index(self):
          return "<h1>Hello World</h1>"

 config = AppConfig(minimal=True, root_controller=RootController())

 print "Serving on port 8080..."
 httpd = make_server('', 8080, config.make_wsgi_app())
 httpd.serve_forever()

web2py

web2py是一個(gè)開源框架,允許開發(fā)者快速創(chuàng)建動(dòng)態(tài)交互式的網(wǎng)站。它的設(shè)計(jì)目標(biāo)是消除拖慢開發(fā)的大量重復(fù)編程任務(wù),比如創(chuàng)建基本的表格。它在最初是作為工具開發(fā)的。隨后被Django和Ruby on Rails模仿,Ruby on Rails是個(gè)Ruby的框架。同TurboGears一樣,它使用MVC架構(gòu)。

最開始的源代碼是由Massimo DiPierro在2007年開放的。在那時(shí),它被稱為Enterprise Web Framework(EWF)。由于命名沖突,它改過好幾次名字,最后在1.16版確定為當(dāng)前的web2py。使用web2py開發(fā)的應(yīng)用包括Movuca內(nèi)容管理系統(tǒng),音樂網(wǎng)站NoobMusic,名為LinkFindr的網(wǎng)絡(luò)診斷工具,以及Instant Press博客平臺(tái)。在2011年,web2py被評(píng)為最好的開源開發(fā)軟件,榮獲Bossie Award。第二年,又?jǐn)孬@InfoWorld的年度技術(shù)獎(jiǎng)。

與Django一樣,web2py也具有廣泛的文檔。新開發(fā)者和高級(jí)開發(fā)者可以免費(fèi)下載它的完整開發(fā)手冊(cè)

web2py的一些優(yōu)點(diǎn)包括:

  • 容易使用——作為一個(gè)魯棒的全棧式框架,它無需其他依賴就可以工作,容易學(xué)習(xí)和部署,安裝也無需任何配置文件,一旦下載完成,安裝完畢,就可以用了。開發(fā)者會(huì)獲得一個(gè)數(shù)據(jù)庫,一個(gè)基于web的IDE,web服務(wù)器以及一個(gè)有多個(gè)核心對(duì)象組成的強(qiáng)大API。
  • 安全性出色——Web2py的模板語言減少了黑客使用跨站腳本的危險(xiǎn),抽象層在創(chuàng)建表單時(shí)有表單域有效性檢查,避免SQL注入,也阻止了跨站請(qǐng)求偽造攻擊(csrf攻擊)。會(huì)話被存儲(chǔ)在服務(wù)器上,阻止壞的執(zhí)行者把瀏覽器cookie弄亂,并且每個(gè)密碼都是哈希后存儲(chǔ)的。

web2py的一些缺點(diǎn)包括:

  • 在常規(guī)基礎(chǔ)上使用管理的接口不太容易
  • 管理的接口沒有權(quán)限
  • 沒有內(nèi)建的單元測(cè)試支持
  • 開發(fā)速度迅速,所有的函數(shù)都有缺省行為,表單時(shí)自動(dòng)生成的,高層次的小部件和應(yīng)用網(wǎng)格都是內(nèi)建的

目錄結(jié)構(gòu)

project/
    README
    LICENSE
    VERSION                    > this web2py version
    web2py.py                  > the startup script
    anyserver.py               > to run with third party servers
    ...                        > other handlers and example files
    gluon/                     > the core libraries
        packages/              > web2py submodules
          dal/
        contrib/               > third party libraries
        tests/                 > unittests
    applications/              > are the apps
        admin/                 > web based IDE
            ...
        examples/              > examples, docs, links
            ...
        welcome/               > the scaffolding app (they all copy it)
            ABOUT
            LICENSE
            models/
            views/
            controllers/
            sessions/
            errors/
            cache/
            static/
            uploads/
            modules/
            cron/
            tests/
        ...                    > your own apps
    examples/                  > example config files, mv .. and customize
    extras/                    > other files which are required for building web2py
    scripts/                   > utility and installation scripts
    handlers/
        wsgihandler.py         > handler to connect to WSGI
        ...                    > handlers for Fast-CGI, SCGI, Gevent, etc
    site-packages/             > additional optional modules
    logs/                      > log files will go in there
    deposit/                   > a place where web2py stores apps temporarily

Flask

Flask是一個(gè)基于Jinja2和Werkzeug的python微框架,和其他框架類似,它是BSD授權(quán)的,一個(gè)有少量限制的免費(fèi)軟件許可。使用Flask的網(wǎng)站包括領(lǐng)英LinkedIN和Pinterest。Flask有以下特點(diǎn):

  • 內(nèi)建的單元測(cè)試支持
  • 模板使用Jinjia2
  • 大量文檔
  • 客戶端會(huì)話使用安全cookies
  • 開發(fā)服務(wù)器和調(diào)試器
  • Restful請(qǐng)求
  • 與WSGI 1.0兼容
  • 基于unicode
  • 大量的擴(kuò)展

Flask是一個(gè)年輕的框架,2010年誕生,F(xiàn)lask的目標(biāo)是不給程序員強(qiáng)加限制,允許你使用自己的數(shù)據(jù)庫對(duì)象關(guān)系映射,模板引擎,會(huì)話中間件以及你的項(xiàng)目所需的其他組件,在我看來這就是這個(gè)微框架的用意。

我想說像Flask這樣的框架更適合有經(jīng)驗(yàn)的開發(fā)者,并不是小規(guī)模應(yīng)用程序所必須的,當(dāng)然,如果你只想做一個(gè)簡單的REST API,那么Flask當(dāng)然再好不過了。

flask我個(gè)人使用的也是比較多的。flask是微框架,比較靈活,適合小型項(xiàng)目。

示例代碼

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return 'Hello, World!'

flask的生態(tài)也很全,社區(qū)也是很活躍的,下面??給出需要的資源。文檔

Flask 優(yōu)秀資源大全

Bottle

和flask一樣,Bottle是一個(gè)服務(wù)器網(wǎng)關(guān)接口(WSGI)網(wǎng)絡(luò)框架。作為一個(gè)文件,它不依賴于Python標(biāo)準(zhǔn)庫外的任何庫。Marcel Hellkamp于2009年寫它的時(shí)候,它僅由包含模板、路由和一個(gè)WSGI抽象層的最小工具開始。對(duì)于程序員尋找靈活性和基本功能、構(gòu)建簡單的應(yīng)用程序和網(wǎng)站、創(chuàng)建一個(gè)Web API來說,這小并且強(qiáng)大的框架是極好的。

它的優(yōu)點(diǎn)包括:

  • 內(nèi)建的快速模板引擎和對(duì)Jinja2,Mako和Cheetah的支持
  • 可以訪問上傳,cookies,表單數(shù)據(jù),標(biāo)題,和其他元數(shù)據(jù)的大量工具
  • 支持fapws3,Google App Engine,CherryPyPaste的內(nèi)建HTTP開發(fā)服務(wù)器
  • 支持動(dòng)態(tài)URLs

Bottle的另一個(gè)優(yōu)點(diǎn)是,它的小巧精干便于嵌入在一個(gè)較大應(yīng)用程序中而不必?fù)?dān)心系統(tǒng)依賴關(guān)系。如果你想用一個(gè)簡單的,干凈的和快速的框架并且它沒有過多冗余,來創(chuàng)建小的應(yīng)用程序,Bottle是適合你的。

示例代碼:

from bottle import route, run, template

@route('/hello/<name>')
def index(name):
    return template('<b>Hello {{name}}</b>!', name=name)

run(host='localhost', port=8080)

文檔

多框架

雖然很難相信,但這些只是少數(shù)幾十個(gè)開發(fā)人員可以使用Python框架,。Python.org報(bào)道,Django,TurboGears和web2py是最受歡迎的完整選項(xiàng)。為了在框架優(yōu)化方面提供一個(gè)全面的觀察,這里我們添加了兩個(gè)高級(jí)形態(tài)的微型框架。有著熱情的追隨者其他框架包括 Pyramid, web.py, Bobo, Albatross, 和 CherryPy。

找到正確的適合選擇

正確框架的選擇取決于項(xiàng)目的規(guī)模,它的通信需求,它是否是一個(gè)獨(dú)立的應(yīng)用程序,定制需求的級(jí)別,開銷,和許多其他因素。同樣重要的是,它取決于哪個(gè)框架適合你個(gè)人的工作方式?;仡欉@些項(xiàng)目并下載他們最新的版本。在計(jì)劃一個(gè)主要旅行之前,試開一下確保你在一個(gè)合適的車輛中。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)載自http://www.itdecent.cn/p/39fdc751b245 環(huán)境管理 管理 Python ...
    半道出了個(gè)家閱讀 987評(píng)論 0 22
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    小邁克閱讀 3,122評(píng)論 1 3
  • Python 資源大全中文版 awesome-python[https://github.com/vinta/aw...
    萬色星辰閱讀 9,923評(píng)論 0 255
  • Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列的資...
    Clemente閱讀 3,303評(píng)論 0 54
  • 看那天 看那風(fēng)。 看那墻, 看那秋海棠。 重復(fù)昨日的重復(fù), 不見今日的露珠。 那日更深露重, 她憂郁的臉色面帶愁容...
    媚珠閱讀 205評(píng)論 0 0

友情鏈接更多精彩內(nèi)容