Python常見web框架彙總

目前,有很是多的Python框架,用來幫助你更輕鬆的建立web應用。這些框架把相應的模塊組織起來,使得構建應用的時候能夠更快捷,也不用去關注一些細節(例如socket和協議),因此須要的都在框架裏了。接下來咱們會介紹不一樣的選項。javascript

Python發源於八十年代後期。開發者是Centrum Wiskunde & Informatica的Guido van Rossum,這是位於荷蘭阿姆斯特丹科學園區的一個數學和計算機科學研究中心。以後Van Rossum一直是Python開發頗有影響的人物。事實上,社區成員給了他一個榮譽稱號:終生仁慈獨裁者(BDFL)。css

通過初期的不起眼,Python已經成爲互聯網最流行的服務端編程語言之一。根據W3Techs的統計,它被用於不少的大流量的站點,超過了ColdFusion, PHP, 和ASP.NET。其中超過98%的站點運行的是Python 2.0,只有1%多一點的站點運行3.0。html

框架讓開發更輕鬆

今天,有着大量的Python框架,它們可讓web應用的開發更輕鬆。這些框架把不一樣的模塊集成在一塊兒,讓你更快的構架程序,而不用關注一些細節(例如socket和協議),框架提供了須要的全部功能。java

做爲分紅兩部分的系列文章的第一部分,咱們會介紹一些最流行的Python框架。雖然大部分現代的web框架都運行在服務端,也有一些框架開始嘗試與客戶端代碼結合,能夠在客戶端運行(例如Skulpt和Trinket)。Python框架一般分爲全棧框架和非全棧框架。全棧框架設計從用戶體驗到數據庫的全部技術,非全棧框架則並不包含整個開發的所有技術。python

此外還有一種微框架,也屬於非全棧框架,可是更輕量級。有的狀況下,微框架是比較適合的,有時又適合使用全棧框架。在文章的第二部分咱們會對全棧框架和微框架作一個比較。程序員

Django

Django恐怕是最有表明性的Python框架了。它是一個遵循MMVC架構模式的開源框架。它的名字來自Django Reinhardt,一個法國做曲家和吉他演奏家,不少人認爲他是歷史上最偉大的吉他演奏家。位於堪薩斯洲的Lawrence城的Lawrence Journal-World報社有兩位程序員,Adrian Holovaty和Simon Willison,他們在2003的時候開發出了Django,用於給報紙開發web程序。web

Django內置了模板引擎,同時也經過OOTB來支持流行的Jinja2引擎。它還支持基於正則的URL分發,能夠經過簡單的URL來完成複雜的映射。sql

Django的優點之一是隻須要單獨的安裝包來安裝。其餘的一些相似的框架須要下載不少組件才能開始工做。並且,Django還有完善的保持更新的文檔,對於開源項目來講這一般是短板。它是一個健壯的框架,很好的集成了不少來自社區的插件和擴展。項目背後的社區看上去也組織的很好,這從它很是完善的文檔和教程就能夠看出來。shell

我學習的第一個框架就是django,方便入門,上手也比較快。我的以爲django的model很差用,主要是跨庫聯表不友好。 django官網數據庫

建立一個項目:

$ 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
複製代碼

下面我給出我一個項目的Django的目錄結構。是django的經典目錄結構形式:

django很簡單,Django生態很完備,基於django開發,通常須要的功能,均可以找到已經有的輪子。開發效率很高。django下的開發就是往框架中的填代碼。另外就是不夠靈活,過重。

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 優秀資源大全

TurboGears

TurboGears是在幾個著名的Python項目上構建起來的一個框架,如SQLAlchemy,WebOb,Repoze,Genshi。在某種意義上,TurboGears是將多個已經創建的開放平臺粘合在一塊兒。和Django同樣,它採用MVC架構。它最近還包含一個「最小模式」,使其能夠做爲一個微框架。

TurboGears是由Kevin Dangoor在2005年開發的。他在當年9月將其做爲一個開源項目發佈。2013年,項目開發人員遷移到支持Python 3,拋棄了他們曾經寫的Pylons代碼。TurboGears的優勢包括:

  • 支持聚合
  • 強大的對象關係映射器
  • 事務系統支持多數據庫間事務
  • 多數據庫支持
  • 以可重用的代碼片斷爲模板
  • 具備不少的靈活性,能夠對接非標準組件
  • 支持分片
  • 模板系統使設計師的設計更輕鬆

TurboGears

TurboGears官網

安裝

$ 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 複製代碼

建立項目

$ gearbox quickstart tgdemo
// 會生成不少文件

.
├── 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包的方式生成的代碼形式,方便打包分發。

用戶只須要修改下面目錄中的代碼便可

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是一個開源框架,容許開發者快速建立動態交互式的網站。它的設計目標是消除拖慢開發的大量重複編程任務,好比建立基本的表格。它在最初是做爲工具開發的。隨後被Django和Ruby on Rails模仿,Ruby on Rails是個Ruby的框架。同TurboGears同樣,它使用MVC架構。

最開始的源代碼是由Massimo DiPierro在2007年開放的。在那時,它被稱爲Enterprise Web Framework(EWF)。因爲命名衝突,它改過好幾回名字,最後在1.16版肯定爲當前的web2py。使用web2py開發的應用包括Movuca內容管理系統,音樂網站NoobMusic,名爲LinkFindr的網絡診斷工具,以及Instant Press博客平臺。在2011年,web2py被評爲最好的開源開發軟件,榮獲Bossie Award。第二年,又斬獲InfoWorld的年度技術獎

與Django同樣,web2py也具備普遍的文檔。新開發者和高級開發者能夠免費下載它的完整開發手冊

web2py的一些優勢包括:

  • 容易使用——做爲一個魯棒的全棧式框架,它無需其餘依賴就能夠工做,容易學習和部署,安裝也無需任何配置文件,一旦下載完成,安裝完畢,就能夠用了。開發者會得到一個數據庫,一個基於web的IDE,web服務器以及一個有多個核心對象組成的強大API。
  • 安全性出色——Web2py的模板語言減小了黑客使用跨站腳本的危險,抽象層在建立表單時有表單域有效性檢查,避免SQL注入,也阻止了跨站請求僞造攻擊(csrf攻擊)。會話被存儲在服務器上,阻止壞的執行者把瀏覽器cookie弄亂,而且每一個密碼都是哈希後存儲的。

web2py的一些缺點包括:

  • 在常規基礎上使用管理的接口不太容易
  • 管理的接口沒有權限
  • 沒有內建的單元測試支持
  • 開發速度迅速,全部的函數都有缺省行爲,表單時自動生成的,高層次的小部件和應用網格都是內建的

目錄結構

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是一個基於Jinja2和Werkzeug的python微框架,和其餘框架相似,它是BSD受權的,一個有少許限制的免費軟件許可。使用Flask的網站包括領英LinkedIN和Pinterest。Flask有如下特色:

  • 內建的單元測試支持
  • 模板使用Jinjia2
  • 大量文檔
  • 客戶端會話使用安全cookies
  • 開發服務器和調試器
  • Restful請求
  • 與WSGI 1.0兼容
  • 基於unicode
  • 大量的擴展

Flask是一個年輕的框架,2010年誕生,Flask的目標是不給程序員強加限制,容許你使用本身的數據庫對象關係映射,模板引擎,會話中間件以及你的項目所需的其餘組件,在我看來這就是這個微框架的用意。

我想說像Flask這樣的框架更適合有經驗的開發者,並非小規模應用程序所必須的,固然,若是你只想作一個簡單的REST API,那麼Flask固然再好不過了。

flask我我的使用的也是比較多的。flask是微框架,比較靈活,適合小型項目。

示例代碼

from flask import Flask

app = Flask(__name__)

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

flask的生態也很全,社區也是很活躍的,下面👇給出須要的資源。文檔

Flask 優秀資源大全

Bottle

和flask同樣,Bottle是一個服務器網關接口(WSGI)網絡框架。做爲一個文件,它不依賴於Python標準庫外的任何庫。Marcel Hellkamp於2009年寫它的時候,它僅由包含模板、路由和一個WSGI抽象層的最小工具開始。對於程序員尋找靈活性和基本功能、構建簡單的應用程序和網站、建立一個Web API來講,這小而且強大的框架是極好的。

它的優勢包括:

  • 內建的快速模板引擎和對Jinja2,Mako和Cheetah的支持
  • 能夠訪問上傳,cookies,表單數據,標題,和其餘元數據的大量工具
  • 支持fapws3,Google App Engine,CherryPyPaste的內建HTTP開發服務器
  • 支持動態URLs

Bottle的另外一個優勢是,它的小巧精幹便於嵌入在一個較大應用程序中而沒必要擔憂系統依賴關係。若是你想用一個簡單的,乾淨的和快速的框架而且它沒有過多冗餘,來建立小的應用程序,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)
複製代碼

文檔

多框架

雖然很難相信,但這些只是少數幾十個開發人員可使用Python框架,。Python.org報道,Django,TurboGears和web2py是最受歡迎的完整選項。爲了在框架優化方面提供一個全面的觀察,這裏咱們添加了兩個高級形態的微型框架。有着熱情的追隨者其餘框架包括 Pyramid, web.py, Bobo, Albatross, 和 CherryPy

找到正確的適合選擇

正確框架的選擇取決於項目的規模,它的通訊需求,它是不是一個獨立的應用程序,定製需求的級別,開銷,和許多其餘因素。一樣重要的是,它取決於哪一個框架適合你我的的工做方式。回顧這些項目並下載他們最新的版本。在計劃一個主要旅行以前,試開一下確保你在一個合適的車輛中。

相關文章
相關標籤/搜索