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

Як перейти з 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.

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

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

Популярні дописи з цього блогу

Регулярні вирази в Python: вивчення та оптимізація

Writing a regular expression is more than a skill -- it's an art. Jeffrey Friedl Що це таке? Рано чи піздно майже кожному програмісту в своєму житті доводиться стикатись з регулярними виразами. Термін "Регулярні вирази" є перекладом з англійської словосполучення "Regular expressions" і не є зовсім точним, а для тих, хто перший раз почув цей термін, мабуть, навіть спантеличуючим (я, наприклад, коли вперше почув, ніяк не міг собі второпати по назві, хоча б приблизно, що це, і для чого використовується). Літературний і більш осмислений переклад звучав би, мабуть, як "шаблонні вирази". Але назва вже прижилась, а скажете "шаблонні вирази" - вас просто не зрозуміють :). Звідси: Регулярний вираз -  це рядок, що задає шаблон пошуку під-рядків в рядку. Регулярні вирази використовуються для аналізу текстів на предмет відповідності текстової інформації деякому шаблону. Наприклад , шаблон, що задає слово, яке містить букву "к". Де застосовують

Python: як програмно перемкнути розкладку клавіатури в Windows

Дослідивши дане питання, я побачив, що Python не має засобів "з коробки" для вирішення цієї задачі. Відвоідно, задача повинна вирішуватись для каждої ОС своїм шляхом. Дане рішення було знайдено мною для ОС Windows XP +. Панацея - Win API Для того, щоб виконати завдання необхідно встановити додатково бібліотеку pywin32 , яка надає доступ до функцій Windows API з Python. З цієї бібліотеки нам знадобиться модуль win32api . >>> import win32api Дослідивши його вміст, можна побачити, що для роботы з розкладкою клавіатури є декілька функцій і одне системне повідомлення Windows - WM_INPUTLANGCHANGE : GetKeyboardLayout GetKeyboardLayoutList LoadKeyboardLayout В даному випадку для нас важлива саме остання функція - LoadKeyboardLayout . Дана функція завантажує нову розкладку (якщо вона ще не завантажена) і виконує після цього ще якісь дії; приймає в якості аргументів два: рядок з ідентифікатором розкладки. дію. Більш детально про їхні можливі значення можна почитати в MSDN . О

wxPython: Gif-анімація і прозорість

Коротко про анімацію в wxPython Дядечко робить анімацію на wxPython В wxPython засоби для роботи з анімацією - це пакет wx.animate . Пакет досить нехитрий - всього декілька класів, з яких частіше за все в роботі використовуються 2: wx.animate.Animation - інкапсулює параметри анімації, а також підтримує завантаження анімації з файлу. Підтримує Gif і Ani   формати анімацій. wx.animate.GifAnimationCtrl - Контрол для рендера і Gif-анімації в графічному інтерфейсі додатку. Останній - дуже класний засіб, оскільки дозволяє фактично в декілька рядків додати в вікно готовуу анімацію: ag_fname = r"progress.gif" ag = wx.animate.GIFAnimationCtrl(self, -1, ag_fname, pos=(0, 0), size=(64,64)) ag.GetPlayer().UseBackgroundColour(True) ag.Play() Досить непогано. І навіть більше ... прозорість. Прозрачность Третій рядок наведеного коду натякає нам, що анімація буде використовувати замість кольору, який в ній встановлений прозорим - фоновий колір вікна. Кажуть, що на GTK воно так і