Плюсы и минусы разных подходов к веб-программированию на Python - PullRequest
25 голосов
/ 04 сентября 2008

Я хотел бы сделать некоторые сценарии на стороне сервера, используя Python. Но я отчасти заблудился с количеством способов сделать это.

Все начинается с подхода CGI "сделай сам" и, похоже, заканчивается некоторыми довольно надежными средами, которые в основном выполняют всю работу сами. И между ними огромное количество вещей, таких как web.py , Pyroxide и Django .

  • Каковы плюсы и минусы фреймворков или подходов, над которыми вы работали ?
  • Какие компромиссы есть?
  • Для , какие проекты они делают хорошо, а что нет?

Редактировать: У меня пока нет большого опыта веб-программирования.
Я хотел бы избежать основных и утомительных вещей, таких как разбор URL для параметров и т. Д.
С другой стороны, хотя видео блога , созданного за 15 минут с Ruby on Rails , произвело на меня впечатление, я понял, что от меня спрятаны сотни вещей - что здорово, если вам нужно написать работающее веб-приложение в кратчайшие сроки, но не настолько, чтобы действительно понять магию - и это то, что я сейчас ищу.

Ответы [ 9 ]

17 голосов
/ 04 сентября 2008

CGI отлично подходит для сайтов с низким трафиком, но у него есть некоторые проблемы с производительностью для всего остального. Это происходит потому, что каждый раз, когда приходит запрос, сервер запускает приложение CGI в своем собственном процессе. Это плохо по двум причинам: 1) запуск и остановка процесса могут занять некоторое время и 2) вы не можете ничего кэшировать в памяти. Вы можете использовать FastCGI, но я бы сказал, что вам лучше написать простое приложение WSGI , если вы собираетесь пойти по этому пути (то, как работает WSGI, на самом деле не совсем чертовски) много отличается от CGI).

Кроме этого, ваш выбор по большей части зависит от того, насколько сильно вы хотите, чтобы фреймворк делал. Вы можете использовать все пение, все танцевальные рамки, такие как Django или Pylons. Или вы можете использовать подход «смешай и сопоставляй» (используйте что-то вроде CherryPy для HTTP, SQLAlchemy для базы данных, вставьте для развертывания и т. Д.). Я также должен отметить, что большинство фреймворков также позволяют вам переключать различные компоненты на другие, поэтому эти два подхода не обязательно являются взаимоисключающими.

Лично мне не нравятся фреймворки, которые делают для меня слишком много магии, и я предпочитаю технику смешивания и сопоставления, но мне сказали, что я также совершенно безумен. :)

Какой у вас опыт веб-программирования? Если вы новичок, я говорю, пойти с Джанго. Если вы более опытны, я советую поиграть с разными подходами и техниками, пока не найдете правильный.

12 голосов
/ 04 сентября 2008

Простейшая веб-программа - это CGI-скрипт, который в основном представляет собой программу, стандартный вывод которой перенаправляется в веб-браузер, выполняющий запрос. При таком подходе каждая страница имеет свой собственный исполняемый файл, который необходимо загружать и анализировать при каждом запросе. Это действительно упрощает запуск и запуск, но плохо масштабируется как с точки зрения производительности, так и с точки зрения организации. Поэтому, когда мне очень нужна очень динамичная страница, которая не перерастет в большую систему, я использую скрипт CGI.

Одним из шагов от этого является встраивание кода Python в код HTML, например, с помощью PSP. Я не думаю, что многие люди используют это в настоящее время, так как современные системы шаблонов сделали это довольно устаревшим. Некоторое время я работал с PSP и обнаружил, что у него в основном те же организационные ограничения, что и у сценариев CGI (каждая страница имеет свой собственный файл), а также некоторые неудобства, связанные с пробелами, из-за попытки смешать незнающий пробелы HTML с Python, чувствительным к пробелам.

Следующий шаг - очень простые веб-фреймворки, такие как web.py, который я также использовал. Как и CGI-скрипты, очень просто запустить и запустить что-то, и вам не нужно сложной конфигурации или автоматически сгенерированного кода. Ваш собственный код будет довольно прост для понимания, чтобы вы могли видеть, что происходит. Тем не менее, он не такой многофункциональный, как другие веб-фреймворки; в прошлый раз, когда я использовал это, не было никакого отслеживания сессии, поэтому я должен был свернуть свой собственный. У него также "слишком много магического поведения", чтобы цитировать Гвидо ("upvars (), bah").

Наконец, у вас есть многофункциональные веб-фреймворки, такие как Django. Это потребует немного работы, чтобы заставить работать простые программы Hello World, но у каждого крупного есть отличный, хорошо написанный учебник (особенно Django), который поможет вам пройти через него. Я настоятельно рекомендую использовать один из этих веб-фреймворков для любого реального проекта из-за удобства, возможностей, документации и т. Д.

В конечном итоге вам придется решить, что вы предпочитаете. Например, все платформы используют языки шаблонов (специальный код / ​​теги) для генерации файлов HTML. Некоторые из них, такие как шаблоны Cheetah, позволяют писать произвольный код Python, чтобы вы могли делать что-либо в шаблоне. Другие, такие как шаблоны Django, являются более строгими и заставляют вас отделять код презентации от логики вашей программы. Это все о том, что вы лично предпочитаете.

Другой пример - обработка URL; В некоторых средах, таких как Django, вы определяете URL-адреса в своем приложении с помощью регулярных выражений. Другие, такие как CherryPy, автоматически сопоставляют ваши функции с URL-адресами по именам ваших функций. Опять же, это личное предпочтение.

Лично я использую смесь веб-фреймворков, используя CherryPy для моего веб-сервера (параметры формы, обработка сеанса, отображение URL и т. Д.) И Django для моего объектно-реляционного отображения и шаблонов. Я рекомендую начать с веб-фреймворка высокого уровня, пройтись по его учебному пособию, а затем начать с небольшого личного проекта. Я сделал это со всеми технологиями, которые я упомянул, и это было действительно полезно. Со временем вы почувствуете, что вам больше по душе, и станете лучшим веб-программистом (и вообще лучшим программистом).

7 голосов
/ 04 сентября 2008

Если вы решите использовать фреймворк на основе WSGI (например, TurboGears ), я бы порекомендовал вам ознакомиться с отличной статьей Другая платформа "Сделай сам" Ян Бикинг.

В этой статье он с нуля создает простую структуру веб-приложений.

Также посмотрите видео Создание веб-фреймворка с WSGI от Кевина Дангура. Дангур является основателем проекта TurboGears.

4 голосов
/ 18 сентября 2008

Если вы хотите стать крупным, выберите Django, и все готово. Но если вы хотите просто научиться, катите свой собственный фреймворк, используя уже упомянутый WebOb - это может быть действительно весело, и я уверен, что вы узнаете гораздо больше (плюс вы можете использовать компоненты, которые вам нравятся: система шаблонов, URL-диспетчер, уровень базы данных, сеансы и т. д.).

За последние 2 года я построил несколько крупных сайтов с использованием Django, и все, что я могу сказать, Django удовлетворит 80% ваших потребностей за 20% времени. Оставшиеся 20% работы займут 80% времени, независимо от того, какую среду вы будете использовать.

3 голосов
/ 21 октября 2008

Всегда стоит сделать что-то нелегкое - один раз - в качестве учебного упражнения. Как только вы поймете, как это работает, выберите подходящую среду для вашего приложения и используйте ее. Вам не нужно изобретать велосипед, когда вы понимаете угловую скорость. : -)

Стоит также убедиться, что вы достаточно хорошо разбираетесь в языке программирования, лежащем в основе фреймворка до , в который вы прыгаете - пытаясь изучать Django и Python одновременно (или Ruby и Rails или X и Y), может привести к еще большей путанице. Сначала напишите некоторый код на языке, а затем добавьте фреймворк.

Мы учимся развиваться, не используя инструменты, а решая проблемы. Бегите через несколько стен, перелезайте через них и найдите несколько более высоких стен!

2 голосов
/ 31 июля 2009

Если вы используете Python, вам следует , а не начинать с CGI, вместо этого начинать с WSGI (и вы можете использовать wsgiref.handlers.CGIHandler , чтобы запустить ваш сценарий WSGI в качестве сценария CGI В результате получается что-то такое же низкоуровневое, как CGI (что может быть полезно в образовательном смысле, но также будет несколько раздражающим), но без необходимости писать в полностью устаревший интерфейс (и привязывать ваше приложение к одному модель процесса).

Если вам нужен менее раздражающий, но похожий низкоуровневый интерфейс, то использование WebOb обеспечит это. Вы бы реализовали всю логику, и будет несколько темных углов, которые вы не поймете, но вам не придется тратить время на выяснение того, как анализировать HTTP-даты (они странные!) или разбор POST тел. Я пишу приложения таким образом (без какой-либо другой структуры), и это полностью работоспособно. Как новичок, я бы посоветовал это, если вы заинтересованы в понимании того, что делают фреймворки, потому что вы неизбежно будете писать свой собственный мини фреймворк. OTOH, реальный фреймворк, вероятно, научит вас хорошим практикам проектирования и структуры приложений. Чтобы быть действительно хорошим веб-программистом, я считаю, что вам нужно серьезно попробовать оба варианта; вы должны понимать все, что делает фреймворк, и не бояться его внутренних компонентов, но вы также должны проводить время в продуманной среде, разработанной кем-то другим (т.е. существующей фреймворком), и понимать, как эта структура помогает вам.

2 голосов
/ 04 сентября 2008

Если вы никогда раньше не занимались программированием на CGI, я думаю, что стоило бы сделать один проект - возможно, просто образец игрового сайта для себя - используя подход DIY. Вы узнаете намного больше о том, как работают все различные части, чем с помощью фреймворка. Это поможет вам в разработке и отладке, а также во всех ваших будущих веб-приложениях, как бы вы их ни писали.

Лично я сейчас использую Джанго . Реальное преимущество - очень быстрое развертывание приложений. Объектно-реляционное отображение помогает быстро двигаться, и библиотека шаблонов доставляет удовольствие. Кроме того, интерфейс администратора предоставляет базовые экраны CRUD для всех ваших объектов, поэтому вам не нужно писать какие-либо «скучные» вещи.

Недостатком использования решения на основе ORM является то, что если вы действительно хотите вручную обработать некоторый SQL, скажем, из соображений производительности, он будет намного сложнее, чем был бы в противном случае, хотя все еще очень возможен.

1 голос
/ 09 декабря 2009

Для небольших проектов достаточно просто развернуть свой проект. Тем более, что вы можете просто импортировать шаблонизатор, такой как Genshi , и получать его довольно быстро и легко. Иногда просто воспользоваться отверткой быстрее, чем искать дрель.

Полноценные фреймворки обеспечивают гораздо больше мощности, но их необходимо сначала установить и настроить, прежде чем вы сможете использовать эту мощность. Для более крупных проектов это незначительная проблема, но для более мелких проектов это может занять большую часть вашего времени, особенно если структура незнакома.

1 голос
/ 04 сентября 2008

ОК, rails на самом деле довольно хороши, но там происходит слишком много магии (из мира Ruby я бы предпочел merb вместо rails). Я лично использую Pylons, и я чертовски счастлив. Я бы сказал (по сравнению с django), что пилоны позволяют вам менять местами внутренние детали, чем django. Недостатком является то, что вам придется самостоятельно писать больше материала (например, базовый CRUD).

Плюсы использования фреймворка:

  1. Выполняй вещи быстро (и я имею в виду, что молниеносно, когда ты знаешь основы)
  2. все соответствует стандартам (что, вероятно, не так-то просто достичь при развертывании собственного)
  3. легче заставить что-то работать (много учебников), не читая gazillion статей и документов

Минусы:

  1. вы учите меньше
  2. сложнее заменить детали (не так уж много проблем с пилонами, тем более с django)
  3. сложнее настроить некоторые низкоуровневые вещи (например, вышеупомянутые SQL)

Исходя из этого, вы, вероятно, сможете придумать, для чего они хороши :-) Поскольку вы получаете весь код, его можно настроить, чтобы он соответствовал даже самым странным ситуациям (пилоны, предположительно, теперь работают на движке приложений Google ...) .

...