Вступ
Останнім часом на форумах часто почали з'являтись теми про те, як перейти з php на python. Звісно ж, тут я буду розглядати лише веб-розробку.
В цій статті я хотів би роз'яснити деякі моменти, щоб php-розробникам, які, все-таки, вирішили починати розробляти веб-додатки на python було зрозуміло, що тут та як.
Як працює php?
Для початку візьмемо до уваги, що PHP з самого початку задумувався і розроблявся виключно як мова для веб-розробки, і в 99.9% випадків для цього і використовується (можна, звичайно, писати і GUI-додатки, наприклад, для цього є GTK-біндінги).
Говорячи про те, як працює PHP, я маю на увазі те, як прийнято в більшості випадків розробляти веб-додатки на 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 - проект помер в зародку, а хто так пише - піддаються остракізму. Можливий завдяки 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.
ВідповістиВидалити