mod_php vs mod_python

时间:2009-05-16 16:01:54

标签: php python mod-python

为什么mod_python是oop而mod_php不是?

示例:我们访问www.example.com/dir1/dir2

如果你使用mod_python apache打开www / dir1.py并调用dir2方法 但如果你使用php模块apache打开www / dir1 / dir2 / index.php

6 个答案:

答案 0 :(得分:6)

我们来谈谈mod_python与mod_php。

由于Python语言并非专门用于提供网页,因此mod_python必须做一些额外的工作。

由于PHP语言专门用于提供网页,因此mod_php只是启动一个命名的PHP模块。

对于mod_python(与mod_fastcgi或mod_wsgi不同),mod_python的设计者决定调用Python的最佳方法是调用模块中定义的对象的方法。希望该对象的方法将标题和网页内容写入stdout。

在mod_wsgi的情况下,设计者决定调用Python的最佳方法是在模块中调用函数(或可调用对象)。希望该函数将使用提供的对象来创建标题并返回包含网页内容的列表字符串。

对于mod_php,他们只是调用模块,因为PHP模块旨在提供网页。程序运行,运行结果是一页内容;通常是HTML。

mod_php以一种方式工作的原因,mod_python工作另一种方式,而mod_wsgi工作方式是第三种方式是因为它们不同。由不同的人撰写,对网页的制作方式有不同的定义。

php页面可以是面向对象的。 mod_wsgi函数可以是可调用对象,也可以是简单函数。这些都是设计选择。

类的mod_python要求是由mod_python的设计者做出的设计选择。

“为什么”的原因永远不会有用。 “为什么”的原因是因为某人决定以这种方式设计它。

答案 1 :(得分:4)

因为mod_python将URL抽象为“类RPC”机制。您可以在PHP中实现相同的功能。我总是手工做,但我很确定有预先包装的梨模块。

请注意,mod_python行为不是强行“最好的”。这一切都等于您希望为应用程序提供的设计类型,以及它对客户端的行为方式。据我所知,mod_python方法假定每个URL都有一个函数,比如将模块结构映射到URL树。这在技术上并不是一个特别好的方法,因为您使用的技术(mod_python)与应用程序的URL布局之间存在紧密的关联。

关于为什么的原因,theres'没有理由。有些人喜欢一种食物,有些人喜欢另一种食物。在某些情况下,设计是品味和艺术选择的问题,而不仅仅是技术限制。

答案 2 :(得分:4)

我认为你对HTTP如何运作有一些误解。 http标准中没有任何内容要求您将某个文件作为资源。这就是mod_php如何工作的方式,对于给定的路径,此路径被转换为服务器磁盘上的php文件,而后者又由编译器解释。

另一方面, mod_python 模块更通用,它允许您将任何资源映射到对某个python对象的调用。只是有些配置可以直接使用,以便更容易入手。在大多数情况下,URL的发送由您的框架管理,其工作原理取决于框架实现者。

由于 mod_python 模块的通用特性,您还可以访问 mod_php 模块中没有的一些apache功能,例如,您可以编写我自己的身份验证处理程序,我不仅适用于您的python webapp,也适用于您的apache中的其他应用程序。

答案 3 :(得分:0)

在PHP中,您可以为您的网页编写从上到下的脚本,过程编程和函数调用,OOP。这是PHP首次创建的主要原因,以及它是如何发展的。 mod_php只是Web服务器利用PHP作为预处理器的模块。所以它只是将HTTP信息和PHP脚本传递给PHP解释器。 PHP的网页创建方式就是你想要的;编写一个从上到下的脚本,在不同的文件中定义函数并包含这些函数和调用函数,或者在OOP中编写应用程序,您现在还可以使用许多功能齐全的框架来确保您的应用程序设计和结构符合当今的最佳实践和设计模式。

我是Python的新手,并不熟悉使用python进行Web编程。但据我所知,python并不是为了使Web编程更容易而创建的。它本来是一个通用的编程语言,所以虽然有可能在python中编写简单的从上到下的脚本并将它们作为网页响应运行(我不确定这样的事情是否可行),它是不是pythonic方式,所以我认为mod_python的开发人员希望python中的web编程采用pythonic方式。

答案 4 :(得分:-1)

也许我误解了你的问题,但Python和PHP都支持程序和面向对象的编程。 (尽管人们可以说Python对OO的支持是两者中更强的。)

答案 5 :(得分:-1)