介绍三个 Python Web 框架
快速了解来自 Python 社区的三种 Web 框架技术。
由于围绕 Ruby on Rails 的所有宣传,有抱负的 Web 应用程序程序员如果认为 Rails 是构建下一个伟大 Web 应用程序的唯一途径,是可以理解的。但是,Rails 不是唯一的选择,Ruby 也不是在这个非常活跃的领域中唯一值得考虑的语言。Perl 拥有大量且不断增长的 Web 框架集合,包括 Maypole、Catalyst、Jifty 和 Gantry(仅举几例)。即使在 Ruby 领域,技术列表也在不断增长,包括 Merb、Camping、Nitro/Og 和 Ramaze。而且,我们不要忘记来自世界上最受欢迎的 Web 模板语言 PHP 的一些项目:Zoop、Jelix、Cake 和 Biscuit。
事实上,在 Google 中输入您最喜欢的编程语言的名称以及“web framework”一词,会产生似乎没完没了的列表。在所有的喧嚣中,很容易忘记另一种伟大的脚本语言 Python,它的人气一直在稳步增长。这是理所当然的——Python 是一种伟大的语言,在其众多荣誉中,它赢得了 2008 年 LJ 读者选择奖中最受欢迎的脚本语言类别和 2009 年最受欢迎的编程语言。
在本文中,我将介绍三个最活跃的 Python Web 框架:Django、Pylons 和 TurboGears。
本文未包含的两种技术,一些读者可能认为值得讨论,是 Zope 和 web2py。在撰写本文时,Zope 主要用于构建内容管理系统网站,而 web2py 看起来非常有前景。Zope 和 web2py 都可能满足您的需求,您可能需要进一步探索它们(请参阅“资源”)。
让我们认识一下这些框架Django 是在 World Online 新闻站点的工作基础上开发的。因此,它声称坚如磐石、可扩展且适用于多种用途。Pylons 在很大程度上受到 Ruby on Rails 设计的影响,旨在提供来自其他 Python 框架集合的最佳部分。它是一个轻量级框架,专为速度而构建。TurboGears 被称为元框架,它建立在其他工具的集合之上,包括 SQLObject 数据库层、cherrypy HTTP 中间件技术、Kid 模板系统和 MochiKit AJAX 库。所有这三个 Web 框架都遵循现在熟悉的模型-视图-控制器范例,该范例正迅速成为所有 Web 框架技术的定义特征。
安装所有三个框架都可以在 Ubuntu 存储库中找到。但是,在撰写本文时,我发现存储库支持的版本比每个框架网站上的最新版本要旧一些。因此,我选择执行下载/安装,而不是为每个框架执行 apt-get。值得庆幸的是,安装所有这三个框架都很容易——当然,前提是您的计算机上已经安装了 Python。由于 Python 多年来一直是大多数发行版的标准组件,因此这实际上不是问题。请注意,我必须从 Ubuntu 存储库安装 python-mysqldb 包才能使用 MySQL,我选择的 Web 数据库后端。在撰写本文时,我使用的框架版本是 TurboGears 1.0.7、Pylons 0.9.6.2 和 Django 的 1.0 版本。
要获取 Django 的副本,请从 Django 网站(请参阅“资源”)下载最新的 tarball,然后在 GNU/Linux 提示符下发出以下命令
tar -zxvf Django-1.0.tar.gz cd Django-1.0 sudo python setup.py install
对于 Pylons,请使用此命令
easy_install Pylons==0.9.6.2
对于 TurboGears,请从 TurboGears 网站(请参阅“资源”)下载 tgsetup.py 脚本,然后在 GNU/Linux 提示符下发出以下命令
sudo python tgsetup.py
就是这样!您现在可以探索每个框架了。
入门每个框架都提供全面的在线文档,旨在帮助 Web 开发人员尽快上手并运行。我将根据它们的“快速入门”教程来回顾每个框架。毕竟,如果 Web 开发人员无法快速获得 Web 框架的经验,他们可能会转向另一个框架,因此教程的质量非常重要。
DjangoDjango 教程是一个出色的分步指南,旨在尽快启动一个简单的 Django 项目。我喜欢该教程提供了许多指向更详细文档的链接,但不要求您阅读它们才能继续学习。在几分钟之内,我就启动了一个服务器,并且 Django 正在提供其默认网页。
Django 教程分为四个部分,它将引导您创建一个基于 Web 的投票应用程序。第一部分准备数据库以保存 Web 应用程序的数据,该数据跟踪投票问题和与之相关的投票。在这样做时,您将被介绍到 manage.py Django 管理实用程序。本部分教程将引导您完成一系列与数据库的 shell 交互,使用 Django 数据库 API,清楚地演示了 Django 自动创建的、可用于与 Web 应用程序数据交互的方法。与其他框架一样,实际上不需要了解 SQL,因为 Django 抽象化和自动化了大多数数据库交互。
在数据端准备就绪后,教程的第 2 部分专注于 Web 应用程序的管理端,该管理端旨在供网站管理员使用。与第 1 部分一样,说明是跟随类型的,书写清晰明了。Django 管理系统提供的功能至少令人印象深刻。教程本身建议您“花几分钟时间惊叹一下您不必编写的所有代码”。这里免费提供了大量的管理功能。本教程快速浏览了可以添加到 Web 应用程序以控制管理界面外观和感觉的少量代码。例如,如果您想要一些花哨的 AJAX 功能,这是一个微不足道的更改。
第 3 部分介绍了构建示例 Web 应用程序公共界面所需的 Django 代码。提供视图的第一次尝试使用 Python 代码生成内容,该内容可以工作,但在需要定期更改时会很快崩溃。因此,Django 允许将网页的设计与 Python 控制器代码分开,使用其自己的模板系统,该系统是 HTML 和 Django 控制逻辑(用 {% 和 $} 标签括起来)的混合。以下是教程中的一个示例
{% if latest_poll_list %} <ul> {% for poll in latest_poll_list %} <li>{{ poll.question }}</li> {% endfor %} </ul> {% else %} <p>No polls are available.</p> {% endif %}
当显示时,此模板将投票列表显示为项目符号列表。请注意 Django 逻辑代码(在 {% 和 %} 分隔符内)是如何以类似 Python 的语言编写的,从而提供了一种可以根据任何数据的可用性来控制显示的方式。
Django 教程的最后一部分通过提供完成 Web 应用程序所需的 Python 代码和模板来完成示例应用程序。这包括一些简单的表单处理以及关于分解和重用代码的建议。它还介绍了 Django 通用视图的强大概念,该概念旨在大幅减少 Django 程序员需要编写的 Python 代码量。
我花了几个小时完成了整个 Django 教程,玩了示例代码并阅读了一些相关材料。总而言之,Django 教程是一次愉快的工作经历,我经常发现自己摇头,感叹与提供的复杂功能相比,其中一些内容是多么容易。该教程不仅让您快速启动并运行一个有用的 Django 项目,而且还激发了您对更多内容的渴望。一个不错的功能是,它与其他此类系统共享,即当您更改项目的源文件时,Django Web 服务器会自动重新加载 Web 应用程序,以使更改立即可用于测试。虽然这样的设置在生产环境中会非常慢,但在开发时却是一种恩赐。在一个终端窗口中编辑文件、保存它,然后让 Django 服务器在另一个终端窗口中因状态更改而自动重启,这也相当酷。
Pylons成功安装 Pylons 后,我深入研究了在线文档的“入门”部分并开始工作。几乎立即,当 Pylons 抱怨我的 Python 没有 profiler 模块时,我遇到了一个小障碍。一个快速的 apt-get 解决了这个问题
sudo apt-get install python-profiler
Pylons 教程将引导您完成一个简单的 HelloWorld 应用程序。在甚至讨论任何代码之前,本教程声明可以使用 Python EGG 包格式分发任何完成的 Pylons 应用程序,这很酷。当创建一个新项目时,Pylons 会创建必要的基础设施,以便轻松创建 EGG。快速查看为新项目创建的文件会发现 Pylons 确实受到了 Ruby on Rails 的启发(当然,这没什么错)。此设计决策的优点之一是测试与 Pylons 同等重要,每个新项目都会自动创建一个 tests 目录。通过使测试变得轻而易举,Pylons 使在构建 Web 应用程序时难以不考虑测试。
完成示例应用程序的创建有点令人不安,因为 Pylons 感觉太像 Ruby on Rails 了。Pylons 路由系统几乎是完全克隆的。也就是说,Pylons 模板系统是它自己的,并且默认情况下基于 Mako(请参阅“资源”)。Mako 是一种模板技术,与 Django 一样,它提供了一种类似 Python 的语法,并且 Mako 和 Pylons 项目非常密切相关。
与 Django 相比,Django 提供了一个清晰、逻辑的教程,旨在让应用程序快速启动并运行,而 Pylons 的等效教程则有些单薄,并且它假设读者具有 Web 应用程序开发(和框架)的一些经验。这可能对某些人有效,但并非对所有人有效。例如,我有点失望地没有在介绍性材料中看到任何关于数据库连接的提及。Pylons 文档确实谈到了 SQLAlchemy,这是一个单独下载的插件,它抽象化了一系列流行的数据库管理系统。我期望这项技术能够开箱即用,但当它没有实现时,我感到有点失望。公平地说,在撰写本文时,Pylons 尚未达到 1.0 版本(与 Django 和 TurboGears 不同),因此在您阅读本文时,一些粗糙的边缘可能会被平滑。当然,已经包含的内容显示出巨大的潜力,并且框架声称它很快,这在我进行的测试中得到了证实。
Pylons 的另一个令人喜欢的特点是它被构建为可自定义的。不喜欢 Mako?没关系,因为 Pylons 支持越来越多的其他模板技术。SQLAlchemy 也是如此。Pylons 还支持 SQLObject 以及 Python 的标准 DB-API。这使得 Pylons 非常灵活(因为有所有这些选择),并且肯定使其成为值得关注的 Web 框架。
TurboGearsTurboGears 构建在 Web 开发工具集合之上,这与 Pylons 非常相似。非常值得关注的是,下一个主要版本 TurboGears 2.0 旨在构建在包括 Pylons 在内的其他技术之上!TurboGears 社区承诺的是能够以更高、更高效的水平工作——因此,提出了元框架的想法。
官方教程是“20 分钟 Wiki”,它以截屏视频和基于 Web 的文档的形式提供。不要试图跟随截屏视频(就像我一样)。它的速度太快了,除了快速概述之外,什么都不是。书面教程涵盖了与截屏视频相同的内容,但它是为了让您完成而设计的。与 Django 教程一样,这个教程也写得很好且易于理解。与 Pylons 一样,TurboGears 提供了创建 EGG 以及为新项目编写测试所需的部分。与 Pylons 不同,但与 Django 类似,TurboGears 教程基于将数据存储在数据库中,并使用 SQLite。
提供了大量关于使用替代数据库后端配置 TurboGears 的说明,因此我配置 TurboGears 以使用 MySQL(这是对配置文件进行微不足道的一行更改)。当我尝试使用建议的命令创建数据库架构时,我收到了长长的 Python 异常处理错误列表。我认为我在 MySQL 配置中犯了一个错误,但无法识别它,所以我退回到仅使用 SQLite,但仍然出现相同的错误。此时,我实际上详细阅读了错误消息,发现系统上安装的 0.9.1 版本的 SQLObject 需要是 0.10.1 版本。当我使用 easy_install 检查已安装的 SQLObject 版本时,它忠实地告诉我已安装 0.9.1 版本,并且这是我的“最佳选择”。以下命令强制 easy_install 使用最新版本的 SQLObject 开发版本,即 0.10.1
sudo easy_install -U SQLObject
解决了这个问题后,数据库架构的创建工作顺利进行。接下来是使用 Kid 为 Wiki 创建模板。值得注意的是,Kid 允许将 Python 用作模板语言(而不是 Django 提供类似 Python 的模板语言的做法)。本教程的一个优点是,完成每一页的程序员可以评论,并且他们的评论会包含在页面底部。这允许评论,例如“不要忘记尝试这个”或“更好的技术是这个”等等。总是有很多东西可以从其他程序员的经验中学习,这使得 TurboGears 教程底部的评论非常有益。遗憾的是,由于严重的垃圾邮件,评论已被禁用(希望这种限制很快会被解除)。
另一个很棒的功能是 TurboGears 工具箱。这是一个基于 Web 的工具集合,用于处理 TurboGears Web 应用程序的各个部分。本教程将引导您使用工具箱,使用 CatWalk 工具向数据库添加一些数据。它都是点击式的,非常流畅。本教程逐步介绍了创建一个功能合理的 Wiki,其中包含 AJAX。在本教程的结尾,有很多关于进一步阅读的建议。虽然本教程被称为“20 分钟 Wiki”,但这有点误导。诚然,截屏视频持续 20 分钟,但当您独自完成本教程时,请计划投入几个小时。
了解更多信息除了每个框架的网站提供的在线文档外,越来越多的书籍专门介绍 Python Web 应用程序领域。在 Amazon.com 中输入每个框架的名称,发现了 5 本关于 Django 的书,1 本关于 TurboGears 的书和 1 本关于 Pylons 的书。还有少量书籍概述了 Python Web 框架,并包含有关此处提到的一些或所有框架的材料。
结论认为 Ruby on Rails 是 Web 应用程序开发领域唯一选择的 Python 程序员不必担心。Python 领域为希望将已获得和来之不易的 Python 技能应用于 Web 平台的有抱负的 Web 开发人员提供了许多选择。当然,不仅仅是 Python 程序员可以从中受益。任何希望进入 Web 开发领域的人都应该环顾四周。Ruby on Rails 很酷,但它并不适合所有人。存在很多选择,Python 在其中也占有相当数量的有价值的竞争者。Django 和 TurboGears 是该领域的成熟参与者。但是,正如我们 GNU/Linux 社区的人们所知,年轻的后起之秀通常会引起轰动,而 Pylons 很可能就是这样。如果您喜欢 Ruby on Rails 的外观,但更喜欢 Python,那么 Pylons 非常值得花时间研究。如果我要启动一个新项目,我很难在这三个框架中选择一个,因为它们都各有优点。但是,我喜欢 TurboGears 的感觉,以及未来开发将基于 Pylons 的事实,这让我认为我将享受两全其美——一个非常有吸引力的提议。所有这三个框架都足够好,可以让 Web 开发 Python 程序员远离 Ruby on Rails。
资源TurboGears: www.turbogears.org
Django: www.djangoproject.com
Pylons: pylonshq.com
Zope: www.zope.org
web2py: mdp.cti.depaul.edu
Mako: www.makotemplates.org
Paul Barry (paul.barry@itcarlow.ie) 在爱尔兰卡洛理工学院任教。在他的网站上了解更多关于他所做的事情:glasnost.itcarlow.ie/~barryp。