Archive for September 12th, 2007

Pytho WEB 编程的学习方法

Wednesday, September 12th, 2007

Pytho WEB 编程的学习方法

日期: 2007-09-12

目录

Python是一种开发效率较高的语言,因此比较适合需求快速变化并且要求快速开发的WEB开发领域。在此对Python的WEB开发做一些简要介绍并对已有的PythonWEB编程技术的学习方法进行一些分析。

1   Python WEB开发现状

Python的快速开发能力使得其在WEB开发中应用广泛,因此也诞生了很多Python的WEB开发框架。Python的WEB开发框架较多一方面依赖于Python的方便性,另一方面也导致了入门时选择框架的麻烦。先进比较流行的几种Python WEB开发框架有Django、TurboGears、Zope等。

同时,由于很多Python WEB开发框架都是基于MTV模式(区别于MVC),所以也同时产生了很多种模板系统,比较流行的有Cheetah等几种。

为了快速的实现数据库的定义与关联,也产生了几种数据库操作框架,流行的几种包括SQLObject、SQLAlchemy、DBUtils等等。

同时又有一些WEB框架本身使用自己专用的模板系统和ORM系统,比如django、Zope等。

虽然面对林林总总的这么多选择,让人总是不知所措,但是实际上各类框架之间有很多相似之处,也存在很多重复实现。只要学通了其中一套框架体系(包含WEB框架、模板和ORM),其他的框架体系也就都可以触类旁通了。

另外,现在的Python WEB开发也正在逐渐向着以django为主的集中靠拢,所以,本文郑重推荐初学者学习django。

2   WEB开发基础-HTTP

2.1   GET请求

撰写中……

2.2   POST表单

撰写中……

3   WEB开发的基本工具

3.1   重定向

撰写中……

3.2   内部重定向

撰写中……

3.3   cookie

撰写中……

3.4   session

撰写中……

4   几种Python WEB开发框架的对比

这里仅对比如下几种比较流行的WEB开发框架,不求全,但求对比。数据取自2007年9月12日。

框架/功能 django TurboGears Zope CherryPy web.py Twisted mod_python
开始时间 2005.7 2005.9 199x.x 2004.11 2006.1 2001.7 2000.10
书籍数量 1 2 N 1 0 1 1+
单一/组合 单一 组合 单一 不完善 单一 不完善 单一
开发难度 一般 一般 较难 简单 超简单 较难 一般
google搜索结果 2.6M 2.12M 2.48M 1.53M 0.78M 2.11M 2.49M
google中文结果 0.68M 0.12M 0.63M 58.4K 25.7K 0.31M 78.6K

4.1   django

比较推荐,详见下面介绍。

4.2   TurboGears

一套组合框架,HTTP处理使用cherrypy,ORM可以使用SQLObject或SQLAlchemy,模板系统默认为kid,可以更换。作为一套组合框架,有着很多个不同的组件。从TG的哲学上讲这叫不重新发明轮子。但是从我Pylons的经验来看,使得各个组件可以和谐的工作在一起也是很困难的。至少我就曾经因为差不多的Pylons使用的某个组件更新版本的差异最终放弃了Pylons。

TurboGears的优点很明显,有大部头的书,文档丰富。另外,就是其版本已经到了1.0.3了,稳定性值得信赖,另外对于开源软家来说,1.0以上的版本意味着接口的稳定。从表格中可以看出,国内用TG的人很少。我最初对TG的好感也仅限于用过CherryPy一段时间。

4.3   Zope

Python中的巨无霸WEB开发框架,曾经是绝对的选择,后来么,因为学习成本的问题而使用略少了一些。对于初学者不太推荐,因为稍微重量级了一点,可以对比J2EE。至于稳定性,据说很多国外政府和军队的网站在用。而且基于Zope开发的Plone是世界排名第三位的CMS系统。文档么,有中文的书籍支持,英文的更不必说。当然,Zope也是一套组合的框架,一些在Python WEB开发方面的机制当初都是Zope开创的,另外在面向对象数据库等方面,Zope也拥有领先的优势。

如果将来要做Python的企业级WEB开发,绝对推荐。

4.4   CherryPy

一套比较简单的WEB开发框架,只含有WEB开发框架。开发很简单,是并不算是方便,因为ORM和模板等等需要自己来选择和配置。比较适合开发实验系统或为其他应用提供一个WEB管理界面。

如果需要学习TurboGears也推荐先从CherryPy学起,这样很多内部机制就好理解了。

4.5   web.py

一套非常简单的框架,不过并不是非常简洁。只提供WEB开发框架而没有其他东西,但是内部做了对流行的ORM和模板系统的导入引用。使用方式在WEB框架里面是比较独特的,只需要把web.py这一个文件放到工程目录里面带走即可,到其他机器上运行时也无需安装,直接可以使用。因此更加适合做其他系统的WEB管理界面。

如果有兴趣推荐读一下web.py的代码,里面有很多先进的思想对未来的编程很有帮助。

4.6   Twisted

Twisted是一套巨无霸的网络编程框架,其WEB开发不过是HTTP协议实现的一个附带功能,如果希望了解足够深的底层知识并控制这些底层细节,那么推荐。因为连HTTP协议的某些细节你都要照顾到。

所以呢,如果你希望提供一些超高性能的WEB接口,比如AJAX应用,XMLRPC服务器等等,那么强烈推荐,因为这个东东真的是太快了。在我的测试中AMD64 x2的机器用apache ab测试,100并发时每秒可以处理1500个HTTP请求。这速度已经没得挑了。

4.7   mod_python

apache-httpd服务器的Python解释器插件,允许直接控制apache服务器来提供WEB功能。速度比较快,但是速度不是强项。强项是稳定性,拖apache的福,在多进程中使用的mod_python稳定性巨牛无比,即便是死掉一个子进程对整体服务器也没什么影响。但是mod_python一般作为如上多种WEB开发框架的Apache-httpd的API接口来使用,提供高可靠性的服务器前端。至于直接用mod_python编程呢,提供了PSP、publisher、自定义模块等几种方式。总体来说也不难,但是大家习惯了把它当底层了,所以也就没人愿意学了。

文档方面,虽然google中文结果很少,但是却又两份官方文档翻译,这在这些框架里面文档的权威性仅次于Zope。反倒是其他框架的中文资料里面hello world满天飞。国内现在仅有的两家提供Python虚拟主机的,有一家就是专门做mod_python的,当然,另外一家专门做django。

5   几种模板系统的对比

撰写中……

6   几种ORM对比

撰写中……

7   Python WEB 快速入门

有如上面所说的,Python的WEB编程,各个框架之间相似度很大,可以按照一定的步骤了解几个重要的知识点,就可以迅速的过渡到另一个框架了。推荐步骤如下:

  1. 开发服务器的启动和端口配置
  2. hello world程序
  3. 返回字符串的方法
  4. 调用模板的方法(对单一框架则没有)
  5. URL组织
  6. 重定向
  7. 提交参数处理
  8. cookie & session
  9. 调用ORM的方法(对单一框架则没有)
  10. 附加功能,如表单生成与自动验证(TurboGears、Django)、通用模板(django)、中间件支持(Pylons…)、内置认证、AJAX支持等等
  11. 服务器部署

8   django

撰写中……