我想使用Python编写一些服务器端脚本。但我对这么多的方法感到迷茫。
它从自己动手的CGI方法开始,最后似乎是一些非常健壮的框架,基本上可以自己完成所有的工作。中间还有很多东西,比如web.py,吡咯和姜戈。
编辑:我还没有多少网络编程的经验。
我想避免一些基本的和繁琐的事情,比如解析参数的URL等等。
另一方面,虽然15分钟内创建的博客和Ruby on Rails的视频给我留下了深刻的印象,但我意识到有数以百计的东西隐藏在我面前--如果你需要在短时间内写一个工作的webapp
,这是很酷的,但对于真正理解魔法来说并不是那么好--这就是我现在想要的。
发布于 2008-09-04 13:35:45
CGI对于低流量的网站来说是很棒的,但是对于其他的网站,它也有一些性能问题。这是因为每次请求传入时,服务器都会在自己的进程中启动CGI应用程序。这有两个原因: 1)启动和停止进程需要时间;2)不能在内存中缓存任何东西。您可以使用FastCGI,但我认为,如果要使用这种方式,最好只编写一个直接的WSGI应用程序( WSGI的工作方式与CGI并没有太大的不同)。
除此之外,您的选择在很大程度上取决于您希望框架做多少。你可以跟着一个全唱的,所有的舞蹈框架,像姜戈或塔。或者您可以使用混合匹配方法(使用CherryPy作为HTTP,SQLAlchemy用于数据库内容,粘贴用于部署,等等)。我还应该指出,大多数框架也允许您为其他框架切换不同的组件,因此这两种方法不一定是相互排斥的。
就我个人而言,我不喜欢对我有太多魔力的框架,更喜欢混合和匹配技术,但我被告知我也完全疯了。:)
你有多少网络编程经验?如果你是初学者,我建议你和Django一起去。如果你更有经验的话,我建议你在找到合适的方法和技巧之前,先尝试一下不同的方法和技巧。
发布于 2008-09-04 14:11:54
最简单的web程序是CGI脚本,它基本上只是一个程序,其标准输出被重定向到提出请求的web浏览器。在这种方法中,每个页面都有自己的可执行文件,必须在每个请求上加载和解析该文件。这使得建立和运行一些东西变得非常简单,但是在性能和组织方面都很糟糕。因此,当我需要一个非常动态的页面,它不会发展成一个更大的系统时,我会使用一个CGI脚本。
这之后的一个步骤是将Python代码嵌入到HTML代码中,比如使用PSP。我认为现在没有多少人使用它,因为现代的模板系统已经使它变得非常过时。我与PSP一起工作了一段时间,发现它与CGI脚本(每个页面都有自己的文件)有着基本相同的组织限制,并且尝试将空白无知的HTML与对空格敏感的Python混合在一起,还带来了一些与空白相关的烦恼。
下一步是非常简单的web框架,比如我也使用过的web.py。与CGI脚本一样,启动和运行一些东西非常简单,您不需要任何复杂的配置或自动生成的代码。您自己的代码将非常容易理解,因此您可以看到正在发生的事情。然而,它并不像其他web框架那样丰富;上次我使用它时,没有会话跟踪,所以我不得不使用自己的。它还有“太多的魔法行为”引用Guido ("upvars(),bah")。
最后,您有功能丰富的web框架,如Django。这些都需要一些工作才能让Hello程序简单地工作,但是每个主要的程序都有一个很棒的、写得很好的教程(特别是Django)来指导您完成它。我强烈建议在任何实际项目中使用这些web框架之一,因为它的方便性、特性和文档等等。
最终你得决定你喜欢什么。例如,框架都使用模板语言(特殊代码/标记)来生成HTML文件。其中一些模板,如Cheetah模板,允许您编写任意Python代码,以便您可以在模板中执行任何操作。其他模板,如Django模板,则限制性更强,迫使您将表示代码与程序逻辑分开。这都是你个人所喜欢的。
另一个例子是URL处理;一些框架,如Django,让您通过正则表达式在应用程序中定义URL。其他如CherryPy等则通过函数名自动将您的函数映射到urls。同样,这也是个人偏好。
我个人使用CherryPy作为web服务器(表单参数、会话处理、url映射等)和Django (对象-关系映射和模板)的混合web框架。我的建议是从一个高层次的网络框架开始,通过它的教程,然后开始一个小的个人项目。我已经用我提到的所有技术做了这件事,这是非常有益的。最终,你会感觉到你喜欢什么,并在这个过程中成为一个更好的网络程序员(和一个更好的程序员)。
发布于 2008-09-04 13:24:55
如果您决定使用一个基于WSGI的框架(例如TurboGears),我建议您阅读Ian的优秀文章另一个自己动手的框架。
在本文中,他从零开始构建了一个简单的web应用程序框架。
另外,请看凯文·丹戈尔的视频使用WSGI创建web框架。Dangoor是TurboGears项目的创始人。
https://stackoverflow.com/questions/43709
复制相似问题