每次我看到在 Web 开发的上下文中讨论 Ruby 或 Python 时,总是有一个框架(Ruby 的 Rails,Python 的 Django)。这些框架有必要吗?如果不是,那为什么这些语言经常在框架中使用,而 Perl 和 PHP 却没有呢?
14 回答
我只能谈论 Ruby - 但是,不,您不需要一个框架来在 Web 上运行基于 Ruby 的页面。您确实需要启用 ruby 的服务器,例如运行 eruby/erb 的 Apache。但是,一旦你这样做了,你就可以像 RoR 一样创建 .rhtml 文件,它在其中处理内联 ruby 代码。
“需要”是一个强有力的词。你当然可以在没有 Python 的情况下编写 Python,但我不想这样做。
Python 并非设计为(例如 PHP)作为直接的 Web 脚本语言,因此连接到数据库等常见的 Web 类东西不是原生的,框架很方便。
编辑: Apache 存在 mod_python,所以如果您只是想编写一些脚本,那么 Python 不需要框架。如果您想构建一个完整的站点,我建议您使用一个。
简短的回答是否定的,它们不是必需的。在 ruby 中,您拥有 .erb 模板,可以以与使用 PHP 页面类似的方式使用这些模板。您可以使用多种技术(类似 Rails 的框架、模板甚至直接与 HTTP 库对话并构建 CGI 样式的页面)用 ruby 或 Python 编写站点。
像 Python 的 Django 或 Ruby 的 Rails(有很多)这样的 Web 框架只是提高了 PHP 或 ASP 的抽象级别,并自动化了几个过程(如登录、数据库交互、REST API),这总是一件好事。
从 Pythonic 的角度来看,您绝对希望使用其中一个框架。是的,没有它们也可以编写一个 Web 应用程序,但它不会很漂亮。以下是您(可能)最终会从头开始编写的一些内容:
模板:除非您正在编写一个非常快速的 hack,否则您不希望在 Python 代码中生成所有 HTML——这是一个非常糟糕的设计,成为可维护性的噩梦。
URL 处理:拆分 URL 并确定要运行的代码并非易事。Django(例如)提供了一种奇妙的机制来从一组正则表达式映射到一组视图函数。
身份验证:滚动您自己的登录/注销/会话管理代码很痛苦,尤其是当已经有预先编写(和测试)的代码可用时
错误处理:框架已经有一个很好的机制来 a) 帮助你调试你的应用程序,b) 帮助重定向到正确的 404 和 500 页面。
除此之外,所有框架库都经过严格测试(并经过防火测试)。此外,有些社区正在使用相同的代码库进行开发,因此如果您有任何问题,您可能会找到帮助。
总之,您不必这样做,但除非您的项目是“一个新的 Web 框架”,否则您最好使用现有的一个。
框架?哎呀,如果您使用 Python,您甚至不需要 Web 服务器,您可以编写大约三行代码。
至于为什么:
我能想到的最合理的事情是 Perl 和 PHP 是在为 Web 应用程序使用框架的概念流行之前开发的。因此,“旧”的做事方式一直存在于这些文化中。Ruby和Python是在框架流行之后才流行起来的,因此它们一起发展。如果你的语言有一个很好的框架(或者不止一个),并且社区很好地支持,那么没有太多理由去尝试编写一个没有框架的 Web 应用程序。
框架不是必需的。然而,许多开发人员认为框架通过自动化很多事情来简化开发。例如,Django 将根据您的数据库结构为您创建一个生产就绪的后端。如果您愿意,它还可以让您合并各种插件。我对 Rails 或 Perl 框架了解不多,但 PHP 框架如 Zend、Symfony、Code Igniter、CakePHP 等被广泛使用。
在我工作的地方,我们推出了自己的 PHP 框架。
这些框架有必要吗?
不,它们与任何“框架”一样,只是为了加快开发时间并使程序员的工作更轻松。
如果不是,那为什么这些语言经常在框架中使用,而 Perl 和 PHP 却没有呢?
在使用框架的想法出现之前,PHP 和 Perl 是用于构建网站的流行语言。像 Rails 这样的框架是 Ruby 的追随者。我不确定 Python 或 Ruby 在得到框架支持之前是否像 Web 语言那样普遍。
如今,即使是 PHP/Perl Web 开发也应该由一个框架(现在有很多)支持。
绝不需要这些开发框架。但是与大多数开发环境一样,如果您有一个受支持的框架来引用和构建您的应用程序,您的生产力将成倍提高。如果其他人已经对您使用的框架有核心理解,它还可以减少使其他人快速了解您的应用程序所需的培训。
任何可以“打印”的语言都可以用来生成网页,但框架会为您处理大量的 HTML 生成。它们使您可以更多地关注内容,而不是对原始 HTML 进行编码的细节。
对于 python,答案是不,你不必这样做。你可以很容易地直接在你的 web 服务器后面编写 python,看看 mod_python 是怎么做的。
很多人喜欢框架,因为它们以可靠的形式提供了大量样板代码,因此您不必自己编写。但是,就像任何代码项目一样,您应该根据自己的问题选择工具和框架。
您当然可以用任何一种语言编写 CGI 脚本并“原始”地做事。
框架(理想情况下)省去了为其他人已经处理过的事情(会话处理等)编写一堆代码的麻烦。
该决定可能归结为您需要做什么。如果该框架具有您需要的功能,为什么不使用它。如果框架需要大量修改,那么推出自己的东西可能会更容易。或者查看不同的框架。
python 库有许多用于执行 cgi、解析 html、cookie、WSGI 等的模块:
PHP 有很多框架。可能比大多数还要多。在 Ruby 中,大多数人使用 Rails,所以这就是你所听到的,而 Django for Python 被提及的次数更多,而不是没有。但是对于 PHP,您有很多选择。