目前,有很是多的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恐怕是最有表明性的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
复制代码
TurboGears是在几个著名的Python项目上构建起来的一个框架,如SQLAlchemy,WebOb,Repoze,Genshi。在某种意义上,TurboGears是将多个已经创建的开放平台粘合在一块儿。和Django同样,它采用MVC架构。它最近还包含一个“最小模式”,使其能够做为一个微框架。
TurboGears是由Kevin Dangoor在2005年开发的。他在当年9月将其做为一个开源项目发布。2013年,项目开发人员迁移到支持Python 3,抛弃了他们曾经写的Pylons代码。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是一个开源框架,容许开发者快速建立动态交互式的网站。它的设计目标是消除拖慢开发的大量重复编程任务,好比建立基本的表格。它在最初是做为工具开发的。随后被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的一些优势包括:
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是一个基于Jinja2和Werkzeug的python微框架,和其余框架相似,它是BSD受权的,一个有少许限制的免费软件许可。使用Flask的网站包括领英LinkedIN和Pinterest。Flask有如下特色:
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是一个服务器网关接口(WSGI)网络框架。做为一个文件,它不依赖于Python标准库外的任何库。Marcel Hellkamp于2009年写它的时候,它仅由包含模板、路由和一个WSGI抽象层的最小工具开始。对于程序员寻找灵活性和基本功能、构建简单的应用程序和网站、建立一个Web API来讲,这小而且强大的框架是极好的。
它的优势包括:
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。
正确框架的选择取决于项目的规模,它的通讯需求,它是不是一个独立的应用程序,定制需求的级别,开销,和许多其余因素。一样重要的是,它取决于哪一个框架适合你我的的工做方式。回顾这些项目并下载他们最新的版本。在计划一个主要旅行以前,试开一下确保你在一个合适的车辆中。