mod_php против mod_python - PullRequest
4 голосов
/ 16 мая 2009

Почему 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 ]

7 голосов
/ 17 мая 2009

Давайте поговорим о mod_python против mod_php.

Поскольку язык Python НЕ специально предназначен для обслуживания веб-страниц, mod_python должен выполнить дополнительную работу.

Поскольку язык PHP специально предназначен для обслуживания веб-страниц, mod_php просто запускает именованный модуль PHP.

В случае mod_python (отличается от mod_fastcgi или mod_wsgi), дизайнер mod_python решил, что лучший способ вызвать Python - это вызвать метод объекта, определенного в модуле. Надеюсь, этот метод этого объекта запишет заголовки и содержимое веб-страницы в стандартный вывод.

В случае с mod_wsgi дизайнер решил, что лучший способ вызвать Python - это вызвать функцию (или вызываемый объект) в модуле. Надеемся, что эта функция будет использовать предоставленный объект для создания заголовка и возврата строк списка с содержимым веб-страницы.

В случае mod_php они просто вызывают модуль, потому что модули PHP предназначены для обслуживания веб-страниц. Программа запускается, и результатом этого запуска является страница содержимого; обычно HTML.

Причина, по которой mod_php работает одним способом, mod_python работает другим, а mod_wsgi работает третьим, заключается в том, что они разные. Написано разными людьми с разными определениями способа создания веб-страницы.

Страница php может быть объектно-ориентированной. Функция mod_wsgi может быть вызываемым объектом или может быть простым действием. Это выбор дизайна.

Требование mod_python для класса - это выбор дизайна, сделанный разработчиком mod_python.

Причина «почему» никогда не бывает полезной. Причина «почему» в том, что кто-то решил спроектировать это таким образом.

4 голосов
/ 16 мая 2009

Я думаю, у вас есть неверное представление о том, как работает HTTP. Ничто в стандарте http не требует наличия определенного файла в качестве ресурса. Именно так работает mod_php: для данного пути этот путь преобразуется в файл php на диске сервера, который, в свою очередь, интерпретируется компилятором.

Модуль mod_python , с другой стороны, гораздо более универсален, он позволяет вам сопоставить любой ресурс с вызовом некоторого объекта python. Просто бывает так, что некоторые конфигурации доступны из коробки, чтобы было легче начать. В большинстве случаев отправка URL-адреса управляется вашей платформой, и как это работает, зависит от разработчика фреймворка.

Из-за общей природы модуля mod_python вы также можете получить доступ к некоторым функциям apache, которые недоступны в модуле mod_php , например, вы можете написать собственную аутентификацию обработчик, который может применяться не только к вашему веб-приложению на python, но и к другим приложениям в вашем apache.

4 голосов
/ 16 мая 2009

Поскольку mod_python абстрагирует URL-адрес в «RPC-подобный» механизм. Вы можете добиться того же в PHP. Я всегда делал это вручную, но я уверен, что для этого есть готовые модули груши.

Обратите внимание, что поведение mod_python не является принудительно "лучшим". Все это зависит от типа дизайна, который вы хотите придать своему приложению, и от того, как он ведет себя с клиентами. Насколько я вижу, подход mod_python предполагает, что для каждого URL-адреса у вас есть функция, например отображение структуры модуля в дереве URL-адресов. Технически это не очень хороший подход, поскольку существует тесная связь между используемой технологией (mod_python) и макетом URL вашего приложения.

По причине почему , нет причин. Некоторые люди любят одну еду, а некоторые любят другую. В некоторых случаях дизайн - это вопрос вкуса и художественного выбора, а не только технических ограничений.

0 голосов
/ 17 мая 2009

в PHP вы можете программировать свои веб-страницы сверху вниз сценариями, процедурным программированием и вызовами функций, ООП. это главная причина, почему PHP был впервые создан, и как он развивался. mod_php - это просто модуль для веб-серверов, использующий PHP в качестве препроцессора. поэтому он просто передает информацию HTTP и скрипт PHP интерпретатору PHP. PHP-способ создания веб-страниц - делать то, что вы хотите; Напишите скрипт сверху вниз, определите функции в разных файлах и включите их и вызывайте функции, или напишите свое приложение в ООП. Вы также можете использовать сегодня множество полнофункциональных сред, чтобы убедиться, что дизайн и структура вашего приложения соответствуют современным рекомендациям и шаблоны проектирования.

Я новичок в Python и не знаком с веб-программированием на Python. но насколько я знаю, python не был создан для облегчения веб-программирования. он был задуман как язык программирования общего назначения, поэтому, хотя можно было бы написать простые сценарии сверху вниз на python и запускать их как ответы на веб-страницах (я не уверен, что это возможно), это не питонским способом, и поэтому я думаю, что разработчики mod_python хотели, чтобы веб-программирование на python было в питонском ключе.

0 голосов
/ 16 мая 2009
0 голосов
/ 16 мая 2009

Возможно, я неправильно понял ваш вопрос, но и Python, и PHP поддерживают как процедурное, так и объектно-ориентированное программирование. (Хотя можно утверждать, что поддержка Python для OO сильнее двух.)

...