Вступление
На форуме python.su, в жизни которого я активно участвую начали появляться темы о том, как перейти с php на python. Естественно, здесь я буду рассматривать только веб-разработку.
В этой статье я бы хотел рязъяснить некоторые моменты, чтобы php разработчикам, которые все-таки решили начинать разрабатывать веб-приложения на python было понятно, что да как.
Как работает php?
Для начала, примем во внимание, что PHP изначально задумывался и разрабатывался исключительно как язык для веб-разработки, и в 99.9% случаев для этого и используется (можно, конечно, писать и GUI-приложения, например, для этого есть GTK-биндинги).
Говоря о том, как работает PHP? я имею в виду то, как принято в большинстве случаев разрабfтывать веб-приложения на PHP. Я не буду углублятся в устройство интерпретатора, расширения, MINT, и т.д. Для пущей простоты примем интерпретатор PHP за некую отдельную сущность. В общем случае, все происходит примерно так:
То есть в самом простом случае, мы создаем html страницу, внутри которой находятся блоки PHP-кода, обрабатывающие запрос и генерирующие динамическое содержимое страницы. Первое, что PHP-программисты при переходе на python обычно делают (по крайней мере те, которые пользуются веб-сервером Apache):
- Ставят на Apache mod_python.
- Конфигурят директорию в httpd.conf.
- Добавляют туда скрипт с содержимым: print "Hello, world!".
- Запускают браузер и указывают URL якобы скрипта, например: "localhost/hello.py".
Такое - не работает.
Так что же насчет Python?
Опять же таки вернемся к истории. Исторически и практически Python является языком общего назначения, то есть не нацелен на какую-либо узкую область решения задач. Поэтому он не обладает встроенными средствами работы в веб-среде, как, например, работа с http-сессиями (в отличие от php). Поэтому вариант "создать страничку -> добавить блоки python-кода внутрь" не проканает.
Как разрабатываются веб-приложения на Python?
В отличии от PHP в Python нет стандартных механизмов работы с веб окружением (куки, сессия, и т.д.). Каждый фреймворк и подход имеют свои библиотеки для работы с этими вещами.
Вариант 1. Почти как в PHP. Называется это Python server pages - проект умер в зародыше, а кто так пишет подвергается в Python-сообществе остракизму. Возможен благодаря mod_python. Более детально можно почитать здесь.
Вариант 2. WSGI (web server gateway interface). Являет собой стандарт взаимодейтсвия веб-сервера и веб-приложения Python. В качестве веб-сервера можно использовать Apache с mod_wsgi, nginx с uWsgi, CherryPy и другие. На базе этого стандарта работают многие фреймворки для веб-разработки, в том числе и популярнейший из них - Django. В общем случае, для того, чтобы разрабатывать веб приложения, вам нужно обратится к документации к одному из этих фреймворков. Вот несколько из них:
Вариант 3. Неблокирующий веб-сервер и фреймворк к нему, которые написаны на Python. Имеют свои специфические API. Примеры:
От себя
От себя порекомендую для начала разработки веб-приложений на Python обратится к одному из простых фреймворков, так называемых, микрофреймворков, например, Flask.
Полезные ссылки
- О вебе на wiki Python.org
- "How to use python in the web" из документации
Краще б назвав "Как убить в себе PHP-шника" )))
ОтветитьУдалитьАле тут і без цього можна холівар розгорнути ))
В статье вы совсем забыли про интерфейс FastCGI. Конкретно, в таком случае должна измениться схема генерации страницы, а именно: запуск интерпретатора осуществляется только один раз.
ОтветитьУдалитьДа, совершенно верно, но в данном случае это не принципиально, так как я хотел акцентировать внимание на разнице в подходах к написанию приложений. Так как (кроме оптимизаций) fastCGI и CGI реализуют одинаковый принцип работы, я эту деталь упустил.
ОтветитьУдалитьХорошо, что я никогда не был php-шником - никого ненадо убивать )))
ОтветитьУдалитьPS: Ошибка в названии веб-сервера "Tornado".
Хм...php вроде уделывает питон по скорости
ОтветитьУдалитьОчень сильное заявление. На каких функциях испытывали? в каких окружениях? пользовались ли профайлерами? если да, то как их настраивали в PHP и Python? очень было бы интересно посмотреть...
ОтветитьУдалитьДавайте похоливарим. Я первый: http://shootout.alioth.debian.org/u32/benchmark.php?test=all&lang=python&lang2=php
Можно ещё bottle посоветовать в качестве микро фреймворка.
ОтветитьУдалитьНасчёт того что РНР уделывает пайтон - миф. В вебе главное скорость разработки и читабельность кода, так кто здесь выигрывает?
Helm2004, bottle есть в списке, идет сразу после Flask.
ОтветитьУдалить