Python的Web架构

一个Web架构是一批套件或模组用来允许开发者写Web应用程式(见 WebApplications)或服务而不必处理像是协定、sockets、程序/执行绪管理等的细节。

大部分的Web架构都只有伺服端的技术,虽然AJAX越来越流行,有些Web架构也开始将AJAV程式码加入来帮助开发者(客户端)程式使用者浏览器的特殊供工作需求,在客户端这里Web架构是用web浏览器作为成熟应用执行环境的技术(例如gmail):见Web Browser Programming有更多细节。

当开发者使用架构时,通常会依某种惯例来撰写程式码以便让你可以”插入(plugging in)架构”,代理沟通的责任、基础设施跟低阶的事物到架构中,然后我们在自己的程式码中可以专注在应用程式的逻辑,这个Web开发的”插入”部份通常可以看成传统的程式跟函式库的分别那样,而 “mainloop”符号派送事件到应用程式码就很类似在Python 图形使用者介面程式设计里介绍的那样。

通常架构提供一些活动像是解译请求(取得表单参数、处理cookies跟sessions)、产生回应(提交资料为HTML或其他的格式)、持续不断地储存资料等等,由于一个非凡的Web应用程式会需要一些不同种类的抽象,通常这些抽象彼此互相堆叠,所以那些试着提供应用程式完整解决方案的架构通常也被称作全栈(full-stack)架构,在这架构中他们尝试提供站中每层的部件。

很多架构现在在他们的支援里针对上述的活动跟抽象提供一点点的客制,利用只为某些特定东西所提供抽象的组件,因此,你几乎可以完全从现有的组件来建构自己的全栈架构(full-stack framework)。

受欢迎的全栈架构

一个web应用程式可能使用一个基础的HTTP应用程式伺服器、一个像是资料库的储存机制、一个样板引擎、一个请求的调度器、一个认证模组跟一个AJAX工具包等的结合,这些可以是个别的组件或是在高阶的架构中一起提供。

这些是最热门的高阶架构,很多架构的组件列在WebComponents这一页。

  • Django (1.1版2009-07-29释出) – 完美主义者的Web架构(有期限),Django使建构较好的网页应用程式变得更容易且更快并且程式码写得更少,Django是高阶的Python Web架构它鼓励快速开发以及简洁、务实的设计,它让你建构高效能、更快地优雅的Web应用程式,Django尽可能地专注在自动化跟固守DRY (Don’t Repeat Yourself,不要自己重复)原则。 http://www.djangoproject.com/.
  • Grok (2009-10-07释出1.0版,1.1版2010-05-18释出)是在现有的zope 3函式库上建构的,但目的是提供一种更容易的学习曲线和更灵活的开发经验,它是藉着在组态及DRY(不重复自己)的惯例上来实作。
  • Pylons (2009-02-23释出0.9.7版)是一种轻量级的web架构,强调灵活性和快速开发,它结合了世上Ruby、Python和Perl中最好的想法,提供一个结构,但非常灵活的Python web架构,它也是第一个充分利用新兴的WSGI标准的专案,这个专案只有当你需要它时允许广泛的再利用和灵活性,Pylons跳脱一般的思考方式努力使Web开发更快、弹性跟简单,Pylons是在Paste(见下面)上建置的。
  • TurboGears (2009-05-27释出2.0版) 你曾找过的快速Web开发的巨型架构,结合了SQLAlchemy (Model)Genshi (View)Pylons (Controller), RepozeTosca Widgets,在几分钟内建构一个资料库导向、现成的扩充应用程式,有设计者友善的样板、浏览器端简单的AJAX跟伺服器端、一个令人难以置信威力很强且弹性的物件关联对映(ORM),以及就像写一个函式那样自然的程式码,在回顾了网站之后检查:快速入门手册
  • web2py (2009-11-10释出1.72.3版,1.79.2版本2010-06-08 22:45:26释出) 所有的东西打包在一个套件里没有任何相依的事件,应用程式的开发、部署、侦错、测试、资料库管理和维护可透过所提供的网络界面来做,web2py没有组态档、不需要安装、可以在USB随身碟上执行,web2py使用Python的模型、检视及控制器,内建一个报修系统来管理错误,国际化的引擎、透过ORM抽象层来跟MySQL、PostgreSQL、SQLite、Oracle、MSSQL跟Google应用引擎模式运作,web2py包括了处理HTML/XML、RSS、ATOM、CSV、RTF、JSON、AJAX、XMLRPC、WIKI标记等的函式库,产品就绪,能够上传/下载很大的档案以及向后相容。
  • Zope (2008-10-25释出2.10.7版、2008-25-10释出2.11.2版、2009-01-29释出Zope 3.4.0版,Zope 3.4.1 2010-06-22释出) 作为Python web 架构的始祖,多年来Zope已经发展了一系列的架构,Zope 1在1999年释出,Zope 2是一个web架构也是一个通用的应用程式伺服器,今天它主要用于内容管理系统,Zope 3也是一个独立的架构跟相关的函式库收集,它也包括了新版的Zope 2,所有的Zope架构包括了ZODB、Python的物件资料库。

下列见一些其他较冷门的全栈架构!

内容管理系统

内容管理系统(CMS)通常允许你建构对他们实用的应用程式,通常也提供很多在全栈架构中见到的特色,见内容管理系统更多详细的资料。

Web组件

有些架构提供交互的组件像是样板/输出跟认证/授权之类的东西,所以你可以见到不同架构的使用者实际上会使用相同的组件或函式库,见Web组件有像这样组件的资料。

Web客户端架构

相对于伺服器导向的架构藉由支援预先包装(缺乏弹性、非常具体否则非常好用)的JavaScript组件来提供AJAX(异步JavaScript和XM)、提供像是JavaScript组件产生的请求的伺服端支援,Web客户端架构采取了浏览器引擎动态功能的优点,在浏览器引擎个全部潜能中的方法可以被实现,举例来说,透过编译Python程式码置入JavaScript或是内嵌一个Python解译器到自己的Web浏览器中,在某些案例中,Web浏览器引擎可以执行在单独订制的应用程式里而不是本质上的”web浏览器”中,见Web Browser Programming有更多详细资料。

其他全栈架构

这些架构也提供很多但不是全部的技术堆叠,然而它们没有那么热门所以没列在上头的架构中。

  • CubicWeb – 一个语意的web应用程式架构具有一个查询语言、一个查询加检视的机制、多重资料库、安全、工作流程、重复使用的组件等等的功能。
  • Enamel – 在Twisted、Nevow、Formal跟SQLAlchemy上的一个抽象层将他们的概念整合在单一的架构下。
  • Gizmo(QP) (2007-04-17释出0.7版) 扩充了QP (见下面)添加了功能来帮忙建立丰富且严格的web介面,包括了一个用来支援(赘余的)自动产生客户端栏位验证以及额外的json回呼。
  • Glashammer (2008-08-11释出0.1.3版)是一个全栈的Python web架构强调简单、弹性及扩充性,它是建构在优良的组件之上并且不用重新开发,WSGI、路由、版型、表单、 资料、外挂、程式码、事件、SQLAlchemy、Storm、Couchdb、OpenID、AppEngine、Jquery等等。
  • Karrigell (2010-02-14释出3.0.4版,3.1版2010-04-25释出)是一个弹性的Python web架构,它有清晰直观的语法,它独立于任何资料库、ORM或样板引擎,并让程式设计师在不同的程式码样市之间选择。
  • Nagare – 一个web应用程式快速开发的方法,感谢它有进阶的功能像是真正地自主跟可重用的组件、延伸、可程式化的HTML/XML、自动的AJAX绘制及资料库ORM。
  • notmm (2010-03-09释出0.3.4版,0.3.5版2010-04-12释出) – 一个可扩展性和很多不同的web工具包架构在Django及其它组件上,notmm工具包是给Django开发者使用WSGI 1.0跟Django来建构自订化web应用程式的进阶Python API。
  • Porcupine (2009-07-18释出0.6版)提供你建构以资料为中心的Web 2.0应用程式的需求,包括QuiX Javascript工具包跟Porcupine的物件查询语言(POQL),需要Python 2.5或以上的版本 – 3.0版尚未包括进来。.
  • Pyroxide是建构在Apache的mod_python之上,它使用MVC (模型-视图-控制器)模式以及其它的传统物件导向模式,它抽离了mod_python层呈现一个很明智的物件导向架构,这样开法者可以处理HTTP请求、HTTP回应、页面控制器、视图跟领域模型物件,它跟像是Prototype跟Mochikit的AJAX架构整合很好,它配备了一个优雅的ORM架构并且以Zope Page Templates (Simpletal 专案)执行的吓吓叫。
  • QP (2009-08-25释出2.2版)  一个套件长久基于Durus所定义和执行多重Web应用程式,提供标准的持续性Session跟User类别,简易的互动资料库sessions,跟安全组装html的QPY,套件需要在Python >= 2.4上执行,同样的程式码基础包括Python 3.x上执行!
  • SkunkWeb (2004-09-10释出3.4.0版)
  • Spyce (2006-11-17释出2.1.3版)
  • Tipfy (2010-06-30有0.5.6版可用) tipfy是一个小而有威力的架构,特别地它是由Google App Engine做的。
  • Tornado (2009-09-10释出0.1版) 是一个可扩展、非阻塞式的web伺服器的开放原始码版本,也是推动FriendFeed的工具 (取自Facebook释出这个专案作为开放原始码)。
  • WebCore (2010-03-02释出0.9版) 一个全栈式、轻量型且有效的web开发架构,Web应用程式就跟一个单独的档案那样简单,或是你所想要的那样的结构化,利用流行的WSGI组件、ORMs等等、不会让你锁住、并且提供一个像是init.d那样独立的中介软体组态。
  • web.py (2010-03-20释出0.34版) 考量理想的方法来写一个Web应用程式,编写程式码来实现。
  • Webware (2010-04-18释出1.1beat1) 是一套Python套件跟工具用来开发物件导向、web基础的应用程式。
  • Werkzeug (2010-04-23释出0.6.2版) 是一个Unicode的,包括一个强大的除错器、功能齐全的request跟response物件、处理实体标记的HTTP工具、快取控制表头、HTTP日期、cookie处理、档案上传、强大的URL路由系统跟一堆社群贡献的额外模组。
  • WHIFF (2010-06-03释出1.0版) WHIFF 是WSGI/Python web应用程式的支援服务集合,它允许应用程式被”dropping”的动态页面组合到容器的目录中,他也自动地包含先进的功能支援像是AJAX、jQueryUI widgets、Flash基本的图表等等,以及疯附得文件跟教学文章。
  • XPRESS (1.0 RC3 Released 2009-10-31)是一个用Python写的开放原始码的web应用程式架构,它提供了一个有组织的设计跟撰写一个网站或web应用程式的方法,XPRESS强调安全、速度、简化、可扩充性。

基本架构

这些专案提供基本的 “应用伺服器”,不是在Apache上就是其他的环境上以自己独立的程序来执行,在这许多的架构上你可以你自己样板引擎的选择跟其他的组件在上面执行,虽然有些架构可能了部份技术堆栈的技术。

  • AppWsgi – 建立你自己的ajax架构以执行在mod_wsgi apache的伺服器上的描述
  • Bobo 是一个轻量级的架构用来建立WSGI web应用程式,它的目标就是容易使用跟记得,它涉及两个问题: 1) 对应URL到物件以及 2) 呼叫物件来产生HTTP回应,Bobo没有样板语言、资料库整合层或很多由WSGI中介软体或特定的应用程式函式库提供的较好的其它的功能,Bobo建构在其它架构上,最著名的有WSGI跟WebOb
  • Bottle 是一种快速和简单的微架构,为小型网路应用程式所用,它提供有url参数支援的请求派送(路由) 、样板、键/值资料库、内建HTTP伺服器跟许多第三方WSGI/HTTP-伺服器跟样板引擎的连接器,所有的功能都在一个档案里,没有跟Python标准函式库相依的档案。
  • CherryPy (2010-04-14释出3.0.4版)是python风格、物件导向的HTTP架构,CherryPy驱动的web应用程式实际上是内嵌在他们自己的多执行绪的web伺服器内的独立的Python应用程式,TurboGears、web2py (见上面)也使用CherryPy
  • circuits.web (2010-02-01释出1.2.1版) 是一个基于事件驱动的轻量级跟高效能的HTTP/WSGI架构的组件,cuits.web跟CherryPy(见上述)有相似的功能,像是CherryPy的URL对映,circuits.web应用程式是独立的应用程式具有高效能、多执行绪的web伺服器跟同时强大的可扩展性以及全功能的WSGI支援跟其它web伺服器的发布。
  • Python Paste (2010-04-30释出1.7.3.1版) 带来Python Web 开发跟Web应用程式安装的一致性,提供开发者跟系统管理的工具,另外Pylons (见上述)是建构在Paste之上。
  • PyWebLib (1.3.4) – 提供表单跟sessions的支援;用于实作web2ldap
  • WebStack (2007-10-29释出1.2.7版) – 很轻量级,在功能比较上需要额外的技术层(像是XSLTools及其它)来配合全栈式架构。

提供样板的基本架构

  • Albatross (2010-03-15释出1.4版) 一个小且具弹性的Python工具包用来开发高度状态化的Web应用程式。
  • Aquarium (2007-01-01释出2.3版) 提供方便的函式库、跟Cheetah紧密的结合,不同Web环境的连接器
  • Divmod Nevow (2009-11-25释出0.10.0版) 一个完善的函式库包括鼓励应用跟逻辑表示层分离的资源模式、支援设计者友善的XHTML样板跟纯Pyton样板的标记系统,跟一个强大的AJAX的API (Divmod Athena),这个API以结构化的方法支援高度动态Web网页的建构。
  • JOTWeb2 (2005-12-30释出1.10版) 使用HTML跟TAL/TALES/METAL 模板来开发动态Web应用程式
  • Python Servlet Engine (2008/01/19释出4.0.0beta02) PSE剖析你的样板到二进位编译的”servlets”来产生执行快速的Web页面。
  • Quixote (2007-11-16释出2.5版) 允许开发者开发动态网站大部分尽可能地使用现有的Python知识
  • repoze.bfg (2010-07-03释出1.3a4版) 一个小型、快速、扎实的开放原始码web开发架构,它让真实世界的web应用程式的开发及布署更有趣、更能预测以及更具生产力。
  • Spark (2006-9-15释出0.2.1版) 快速轻量级的Web工具,支援mod_python、WSGI跟Twisted。 (2010-03-15,网站有一周以上没有回应,看起来是死了)。
  • Spiked (2010-01-23释出0.1.3版) – 建置在Twisted跟Cheetah之上的web开发架构。
  • Wasp (2007.07释出2.00版) – 支援命令列、CGI跟内嵌web伺服器模式,具有模板、session机制跟其它模组,强调易用性和熟悉的范例。 (2010-03-15,网站表示它不再更新,”我很抱歉WASP将不再回来,我只是没有在这个冒险上,来看看我如何向我的硕士学位努力…”)

停用的架构

下面的架构不是停用,他们的开发者已经说明不再维护程式码,就是看起来已经没有再开发或维护,在他们的网站上专案已经很久没有更新。

  • 4Suite (伺服器产品似乎常没有更新而且网站常常挂掉)
  • Crusader 是一个功能强大的Python应用伺服器基于一个可延伸、可扩展和易于使用的一般用途得伺服器架构。
  • Cymbeline (2005-12-09释出1.3.1版) 一个应用伺服器架构,包括了像是DB跟任意物件池、Web伺服器、持久化物件库跟文字控制台等功能。
  • maki (开发者不再使用这个产品)
  • Python Server Pages,或PSP (从1999开始旧的Web站台)
  • Snakelets (2008-10释出1.50版) 容易使用的Python Web应用程式伺服器,自从1.50版释出后就没有继续了。

书籍跟文章

  • Steve Holden写了一本关于Python Web Programming的书,这本书来自John Goerzen的Foundations of Python Network Programming有简体中译本,也很有用,欧莱礼的Programming Python 3rd Edition(有繁体中译本)有500页是在写关于Internet的程式设计,包括250页的Web指令码,最后检视Wesley Chun的Core Python Programming的Web Programming这一章节 — 也有一些部份在讨论Web API。
  • Developing With Mod_Python – 一篇关于Mod_Python programming的文章有Cheetah样板跟MySQL,包含的程式码范例。
  • Zope 3 Quick Start Guide 提供了Zope 3简短介绍。

编辑手记

上面的列表应该可以用字母顺序来安排 – 在新的解决方案增加时请反应这一点,在指定释出日期时请使用格式YYYY-MM-DD。

对那些想要宣传并贡献此页的人来说特别值得一提的是在”重组”内容时:

  • 不要移除编辑者的原则:当人们这样做时不只表示他们不关心这样的原则,而且也要让人相信这一页从来没有任何的结构或目标。
  • 假如你必须改变这一页所用的分类,至少尝试指派所有的架构到有意义的分类,不要为了提升某个专案的简介而另外发明特殊的分类,不要合并分类并且将架构放到杂项分类中。
  • 不要新增连结到专案中,除非他们是Web架构,相反地,使用WebComponentsWebServersTemplating这几页,或任何跟WebProgramming相关的页面。
  • 有些架构不再积极开发或维护,不要没有事先任何地调查就只是把纪录移到”停用的架构”这一节里。

一些基本的编辑建议:再编辑的时候使用预览按钮,而不是留下很多小变更在历史纪录中。

ㄚ琪的话,这一篇翻了很久,在翻译期间有更新了不少,目前的截止日期为2010/07/13,如果有更进一步更新,烦请提供讯息,我再补充进来!