Python网页编程不同方法的优缺点
我想用Python做一些服务器端的脚本编写,但对于有这么多种方法我有点迷茫。
一开始是自己动手做CGI的方法,最后似乎又有一些非常强大的框架,基本上可以自己完成所有工作。中间还有很多其他的选择,比如web.py、Pyroxide和Django。
- 你用过的框架或方法有什么优点和缺点?
- 有什么权衡吗?
- 它们适合什么类型的项目,又不适合什么项目?
补充一下:我在网页编程方面的经验还不多。
我希望能避免一些基本而繁琐的事情,比如解析URL中的参数等等。
另一方面,虽然看到用15分钟创建的博客的视频让我印象深刻,但我意识到有很多我不知道的东西——如果你需要快速写一个webapp
,这很不错,但对于真正理解其中的奥秘就不太好了,而这正是我现在想要的。
9 个回答
如果你决定使用一个基于WSGI的框架(比如TurboGears),我建议你看看Ian Bicking写的那篇很棒的文章另一个自制框架。
在这篇文章里,他从零开始构建了一个简单的网页应用框架。
另外,别忘了看看Kevin Dangoor的这个视频用WSGI创建网页框架。Dangoor是TurboGears项目的创始人。
最简单的网页程序就是CGI脚本,简单来说就是一个程序,它的输出会直接发送到请求的网页浏览器。用这种方法,每个页面都有自己的可执行文件,每次请求时都需要加载和解析。这种方式虽然很简单,可以快速搭建,但在性能和组织结构上都不太好。所以当我需要一个非常动态的页面,而且不想让它变成一个更复杂的系统时,我会使用CGI脚本。
比这稍微进阶一点的是将Python代码嵌入到HTML代码中,比如用PSP。不过现在用这种方式的人不多了,因为现代的模板系统已经让它变得有些过时。我之前用过PSP,发现它在组织结构上和CGI脚本差不多(每个页面都有自己的文件),而且在处理空格时也有些麻烦,因为HTML对空格不敏感,而Python对空格是敏感的。
再往上就是一些非常简单的网页框架,比如web.py,我也用过。和CGI脚本一样,这种框架也很容易上手,不需要复杂的配置或自动生成的代码。你自己的代码也很简单,容易理解,所以你能清楚地看到发生了什么。不过,它的功能没有其他网页框架丰富;我上次用的时候没有会话跟踪功能,所以我得自己实现。它还有一些“太多魔法行为”的问题,引用一下Guido的话(“upvars(), bah”)。
最后就是功能丰富的网页框架,比如Django。这些框架需要花点时间才能让简单的Hello World程序运行起来,但每个主要框架都有很棒的、写得很好的教程(尤其是Django),可以一步步教你。我强烈推荐在任何实际项目中使用这些网页框架,因为它们方便、功能多、文档齐全等等。
最终你得决定自己喜欢什么。例如,框架都使用模板语言(特殊的代码/标签)来生成HTML文件。有些框架,比如Cheetah模板,允许你在模板中写任意的Python代码,这样你可以在模板中做任何事情。其他框架,比如Django模板,则更严格,要求你将展示代码和程序逻辑分开。这完全取决于你个人的喜好。
另一个例子是URL处理;一些框架,比如Django,需要你通过正则表达式在应用中定义URL。而其他框架,比如CherryPy,则会根据你的函数名称自动将函数映射到URL。这也是个人偏好问题。
我个人使用的是多种网页框架的组合,使用CherryPy处理我的网页服务器相关的事情(表单参数、会话处理、URL映射等),而用Django处理我的对象关系映射和模板。我建议你从一个高级的网页框架开始,先完成它的教程,然后再开始一个小的个人项目。我在提到的所有技术上都这样做过,收获很大。最终你会找到自己喜欢的方式,并在这个过程中成为一个更好的网页程序员(也会成为一个更好的程序员)。
CGI适合流量不大的网站,但对于其他网站来说,它的性能就有点问题了。原因是每当有请求进来时,服务器都会启动一个新的CGI应用程序,这样做有两个坏处:1)启动和停止一个进程需要时间;2)你无法在内存中缓存任何东西。你可以选择FastCGI,但我觉得如果你要走这条路,直接写一个普通的WSGI应用会更好,因为WSGI的工作方式和CGI其实差不多。
除此之外,你的选择主要取决于你希望框架做多少事情。你可以选择像Django或Pylons这样功能强大的框架,或者选择混搭的方法(比如用CherryPy处理HTTP,用SQLAlchemy处理数据库,用paste进行部署等等)。我还要指出,大多数框架也允许你替换不同的组件,所以这两种方法并不是完全对立的。
就我个人而言,我不太喜欢那些为我做太多“魔法”的框架,更喜欢混搭的方法,但有人告诉我我可能有点疯狂。:)
你有多少网页编程经验呢?如果你是初学者,我建议你选择Django。如果你有更多经验,那就可以尝试不同的方法和技巧,直到找到适合你的那一个。