Перейти до основного вмісту

Як перейти з PHP на Python

Вступ

Останнім часом на форумах часто почали з'являтись теми про те, як перейти з php на python. Звісно ж, тут я буду розглядати лише веб-розробку.
В цій статті я хотів би роз'яснити деякі моменти, щоб php-розробникам, які, все-таки, вирішили починати розробляти веб-додатки на python було зрозуміло, що тут та як.

Як працює php?

Для початку візьмемо до уваги, що PHP з самого початку задумувався і розроблявся виключно як мова для веб-розробки, і в 99.9% випадків для цього і використовується (можна, звичайно, писати і GUI-додатки, наприклад, для цього є GTK-біндінги).
Говорячи про те, як працює PHP, я маю на увазі те, як прийнято в більшості випадків розробляти веб-додатки на PHP. Я не буду заглиблюватись в організацію інтерпретатора, розширення, MINT, та ін.. Для максимальної простоти приймемо інтерпретатор PHP за деяку окрему сутність. В загальному випадку, все відбувається приблизно так:

Тобто, в найпростішому випадку, ми створюємо html-сторінку, всередині якої знаходяться блоки PHP-коду, що опрацьовують запит і генерують динамічний вміст сторінки. Перше, що PHP-програмісти, при переході на python, зазвичай, роблять (принаймні, ті, котрі користвуються веб-сервером Apache):
  1. Ставлять на Apache mod_python.
  2. Конфігурять директорію в httpd.conf.
  3. Додають туди скрипт із вмістом: print "Hello, world!".
  4. Запускають браузер і вказують 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. Приклади:
  • Tornado
  • Zope3
  • Twisted (це швидше засіб побудови фреймворків та серверів)
Дані фреймворки написані в стилі подійно-орієнтованого програмування.

Від себе

Від себе порекомендую для початку розробки веб-додатків на Python звернутись до одного з простих фреймворків, так званих, мікрофреймворків, наприклад, Flask.

Корисні посилання

Коментарі

  1. Краще б назвав "Как убить в себе PHP-шника" )))
    Але тут і без цього можна холівар розгорнути ))

    ВідповістиВидалити
  2. В статье вы совсем забыли про интерфейс FastCGI. Конкретно, в таком случае должна измениться схема генерации страницы, а именно: запуск интерпретатора осуществляется только один раз.

    ВідповістиВидалити
  3. Да, совершенно верно, но в данном случае это не принципиально, так как я хотел акцентировать внимание на разнице в подходах к написанию приложений. Так как (кроме оптимизаций) fastCGI и CGI реализуют одинаковый принцип работы, я эту деталь упустил.

    ВідповістиВидалити
  4. Хорошо, что я никогда не был php-шником - никого ненадо убивать )))

    PS: Ошибка в названии веб-сервера "Tornado".

    ВідповістиВидалити
  5. Хм...php вроде уделывает питон по скорости

    ВідповістиВидалити
  6. Очень сильное заявление. На каких функциях испытывали? в каких окружениях? пользовались ли профайлерами? если да, то как их настраивали в PHP и Python? очень было бы интересно посмотреть...
    Давайте похоливарим. Я первый: http://shootout.alioth.debian.org/u32/benchmark.php?test=all&lang=python&lang2=php

    ВідповістиВидалити
  7. Можно ещё bottle посоветовать в качестве микро фреймворка.
    Насчёт того что РНР уделывает пайтон - миф. В вебе главное скорость разработки и читабельность кода, так кто здесь выигрывает?

    ВідповістиВидалити
  8. Helm2004, bottle есть в списке, идет сразу после Flask.

    ВідповістиВидалити

Дописати коментар