Плюсы и минусы различных подходов к веб-программированию на Python



Answers

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

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

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

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

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

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

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

Question

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

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

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

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




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

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




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

Плюсы использования структуры:

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

Минусы:

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

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




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

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

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




Links