25

我想用 Python 做一些服务器端脚本。但我有点迷失了这样做的方法的数量。

它以自己动手的 CGI 方法开始,似乎以一些非常强大的框架结束,这些框架基本上可以自己完成所有工作。还有很多介于两者之间的东西,比如web.pyPyroxideDjango

  • 您从事框架或方法的优缺点是什么?
  • 有哪些取舍
  • 他们在哪些项目上做得很好,在哪些项目上做得不好?

编辑:我还没有太多的网络编程经验。

我想避免像解析参数的 URL 等基本和繁琐的事情。
另一方面,虽然用Ruby on Rails在 15 分钟内创建的博客视频给我留下了深刻的印象,但我意识到隐藏了数百个东西来自我——如果你需要立即写一部作品,这很酷,但对于真正理解魔法来说并不是那么好——这就是我现在所寻求的。webapp

4

9 回答 9

17

CGI 非常适合低流量网站,但它对于其他任何网站都有一些性能问题。这是因为每次有请求进来时,服务器都会在自己的进程中启动 CGI 应用程序。这很糟糕,原因有两个:1)启动和停止进程可能需要时间;2)您无法在内存中缓存任何内容。您可以使用 FastCGI,但我认为如果您要走那条路,最好只编写一个直接的WSGI应用程序(WSGI 的工作方式实际上与 CGI 并没有太大的不同)。

除此之外,您的选择主要是您希望框架执行多少操作。您可以使用像 Django 或 Pylons 这样的全唱歌、全跳舞的框架。或者,您可以采用混合搭配的方法(例如 CherryPy 用于 HTTP 内容,SQLAlchemy 用于数据库内容,粘贴用于部署等)。我还应该指出,大多数框架还允许您为其他框架切换不同的组件,因此这两种方法不一定相互排斥。

就个人而言,我不喜欢对我来说太神奇的框架,更喜欢混合搭配技术,但有人告诉我我也完全疯了。:)

你有多少网络编程经验?如果您是初学者,我建议您使用 Django。如果您更有经验,我建议您尝试使用不同的方法和技术,直到找到合适的方法和技术。

于 2008-09-04T13:35:45.390 回答
12

最简单的 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 程序员(和一般的程序员)。

于 2008-09-04T14:11:54.740 回答
7

如果您决定使用基于 WSGI 的框架(例如TurboGears),我建议您阅读 Ian Bicking 撰写的优秀文章Another Do-It-Yourself Framework

在文章中,他从零开始构建了一个简单的 Web 应用程序框架。

另外,请查看Kevin Dangoor的视频使用 WSGI 创建 Web 框架。Dangoor 是 TurboGears 项目的创始人。

于 2008-09-04T13:24:55.073 回答
4

如果你想变大,选择 Django 就可以了。但是,如果您只想学习,请使用已经提到的WebOb构建您自己的框架——这真的很有趣,我相信您会学到更多(另外,您可以使用您喜欢的组件:模板系统、url 调度程序、数据库层、会议等)。

在过去的两年里,我使用 Django 构建了几个大型网站,我只能说,Django 将在 20% 的时间内满足您 80% 的需求。剩下的 20% 的工作将花费 80% 的时间,无论您使用哪种框架。

于 2008-09-17T20:04:12.550 回答
3

做一些艰难的事情总是值得的——一次——作为一种学习练习。一旦您了解了它的工作原理,请选择一个适合您的应用程序的框架并使用它。一旦你了解了角速度,你就不需要重新发明轮子了。:-)

在你开始之前,确保你对框架背后的编程语言有相当深入的了解也是值得的——尝试同时学习 Django 和 Python(或 Ruby 和 Rails,或 X 和 Y),可以领先更加混乱。先用语言编写一些代码,然后添加框架。

我们学会开发,不是通过使用工具,而是通过解决问题。撞上几堵墙,爬过去,找到更高的墙!

于 2008-10-21T14:49:57.573 回答
2

如果您之前从未做过任何 CGI 编程,我认为使用 DIY 方法做一个项目是值得的 - 也许只是一个仅供您自己使用的示例游戏站点。与使用框架相比,您将学到更多关于所有不同部分如何工作的知识。这将有助于您设计和调试所有未来的 Web 应用程序,无论您如何编写它们。

我个人现在使用Django。真正的好处是非常快速的应用程序部署。对象关系映射使事情进展迅速,模板库使用起来很有趣。此外,管理界面为您提供所有对象的基本 CRUD 屏幕,因此您无需编写任何“无聊”的东西。

使用基于 ORM 的解决方案的缺点是,如果您确实想要手工制作一些 SQL,比如说出于性能原因,它会比其他方式困难得多,尽管仍然很有可能。

于 2008-09-04T13:17:38.880 回答
2

如果您使用 Python,则不应从 CGI 开始,而是从 WSGI 开始(并且您可以使用wsgiref.handlers.CGIHandler将 WSGI 脚本作为 CGI 脚本运行。结果基本上与 CGI 一样低级(这可能在教育意义上很有用,但也会有点烦人),但不必编写完全过时的接口(并将您的应用程序绑定到单个进程模型)。

如果您想要一个不那么烦人但同样低级的界面,使用WebOb可以提供。您将实施所有逻辑,并且会有一些你不会理解的黑暗角落,但你不必花时间弄清楚如何解析 HTTP 日期(它们很奇怪!)或解析 POST 正文。我以这种方式编写应用程序(没有任何其他框架)并且它是完全可行的。作为初学者,如果您有兴趣了解框架的作用,我会建议您这样做,因为您将不可避免地编写自己的迷你框架。OTOH,一个真正的框架可能会教你应用程序设计和结构的良好实践。要成为一名真正优秀的网络程序员,我相信你需要认真尝试两者;您应该了解框架所做的一切并且不要害怕其内部结构,但您还应该花时间在其他人设计的深思熟虑的环境中(即,

于 2009-07-30T21:44:35.230 回答
1

好的,rails 实际上相当不错,但是其中有太多的魔力(从 Ruby 世界来看,我更喜欢 merb 而不是 rails)。我个人使用 Pylons,非常高兴。我想说(与 django 相比),pylons 允许您比 django 更容易地交换 int 内部部件。缺点是你必须自己写更多的东西(比如基本的 CRUD)。

使用框架的优点:

  1. 快速完成工作(我的意思是一旦你了解了框架就可以快速完成)
  2. 一切都符合标准(滚动您自己的标准时可能并不容易实现)
  3. 无需阅读大量文章和文档即可更轻松地完成工作(大量教程)

缺点:

  1. 你学的少
  2. 更难更换零件(在 pylons 中不是那么大的问题,对于 django 更是如此)
  3. 更难调整一些低级的东西(比如上面提到的 SQL)

从中您可能可以设计出它们的优点 :-) 由于您获得了所有代码,因此可以对其进行调整以适应最奇怪的情况(据说现在可以在 Google 应用程序引擎上使用 pylons ......)。

于 2008-09-04T19:55:29.453 回答
1

对于较小的项目,滚动自己的项目相当容易。尤其是您可以简单地导入像Genshi这样的模板引擎,然后快速轻松地完成很多事情。有时使用螺丝刀比寻找电钻更快。

成熟的框架提供了更多的功能,但必须先安装和设置,然后才能利用这种功能。对于较大的项目,这是一个可以忽略不计的问题,但对于较小的项目,这可能会占用您大部分时间——尤其是在框架不熟悉的情况下。

于 2009-12-09T13:02:23.297 回答