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

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

Python: PEP-8 чи не PEP-8

Пост - не технічний, кому не цікаво - можете далі не читати... PEP-8, хоча й фактично є пропозицією по розширенню Python під номером 8, серед Python програмістів уже став терміном, що позначає правила стилю оформлення коду. Ні, я не збираюсь зараз описувати його тут - про нього можна почитати в першоджерелі . Питання в тому, слідувати цьому стандарту, чи не слідувати? Ітак, стандарт це в більшості випадків добре, оскільки вносить порядок. Наприклад, стандарт USB 2.0 - просто прекрасний стандарт, уявіть собі, якби флешки були не USB, а кожна мала б свій вихід :)... Жахливо, так, були б у нас USB-порти як card-reader'и - 62 в 1.. Реально 62 в 1 Інша справа з PEP-8. Тут все по іншому, адже програма не змінює свою поведінку, якщо ми будемр робити відступ не в 4 пробіла, а 2 (добре, що більшість, все-таки, робить 4), або будемо ставити пробіл перед другою дужкою, чи не будемо і т.д..  Отже, кожен програміст може редагувати свій код як йому хочеться. Мені, наприклад, подобається