最简单的 Web 程序是 CGI 脚本,它基本上只是一个程序,其标准输出被重定向到发出请求的 Web 浏览器。在这种方法中,每个页面都有自己的可执行文件,必须在每次请求时加载和解析。这使得启动和运行某些东西变得非常简单,但在性能和组织方面都很难扩展。因此,当我需要一个非常快速且不会增长为更大系统的动态页面时,我会使用 CGI 脚本。
下一步是将 Python 代码嵌入到 HTML 代码中,例如使用 PSP。我认为现在很多人都不会使用它,因为现代模板系统已经让它变得非常过时了。我与 PSP 合作了一段时间,发现它具有与 CGI 脚本(每个页面都有自己的文件)基本相同的组织限制,以及尝试将无空格的 HTML 与对空格敏感的 Python 混合的一些与空格相关的烦恼。
下一步是非常简单的 Web 框架,例如我也使用过的 web.py。与 CGI 脚本一样,启动和运行某些东西非常简单,您不需要任何复杂的配置或自动生成的代码。您自己的代码将很容易理解,因此您可以看到正在发生的事情。但是,它不像其他 Web 框架那样功能丰富;上次我使用它时,没有会话跟踪,所以我不得不自己动手。引用 Guido ("upvars(), bah") 时,它也有“太多的魔法行为”。
最后,您拥有功能丰富的 Web 框架,例如 Django。这些将需要一些工作才能使简单的 Hello World 程序正常工作,但每个主要程序都有一个很棒的、编写良好的教程(尤其是 Django)来引导您完成它。我强烈建议将这些 Web 框架之一用于任何实际项目,因为它方便、功能和文档等。
最终你必须决定你喜欢什么。例如,框架都使用模板语言(特殊代码/标签)来生成 HTML 文件。其中一些(例如 Cheetah 模板)允许您编写任意 Python 代码,以便您可以在模板中执行任何操作。诸如 Django 模板之类的其他模板更具限制性,并迫使您将演示代码与程序逻辑分开。这完全取决于您个人的喜好。
另一个例子是 URL 处理;某些框架(例如 Django)让您通过正则表达式在应用程序中定义 URL。其他诸如 CherryPy 会自动将您的函数映射到您的函数名称的 url。同样,这是个人喜好。
我个人将 CherryPy 用于我的 Web 服务器内容(表单参数、会话处理、url 映射等)和 Django 用于我的对象关系映射和模板,从而混合使用 Web 框架。我的建议是从一个高级 Web 框架开始,按照自己的方式完成它的教程,然后从一个小型个人项目开始。我已经用我提到的所有技术做到了这一点,这真的很有益。最终你会感觉到你喜欢什么,并在这个过程中成为一个更好的 web 程序员(和一般的程序员)。