1. Введение в Pylons

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

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

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

Вместо того чтобы создать фреймворк, основанный на составных компонентах, Pylons полагается из-за своей легкости на самостоятельные компоненты, свободно присоединяемые с помощью четко определенных интерфейсов прикладных программ (API). Это означает, что вместо того, чтобы быть ограниченными набором компонентов, выбранным создателями фреймворка, разработчики Pylons могут свободно выбирать лучшие компоненты для своих индивидуальных требований. В результате, первые разработчики, которых привлекал Pylons, по тенденции были людьми с большим опытом разработки или людьми, которые написали свои собственные веб-фреймворки Python, потому что они могли осознать выгоду гибкого подхода Pylons. Спустя время по мере того как Pylons становился более известным, Pylons привлек также и менее опытных программистов. Цель этой книги – обратиться к обеим категориям разработчиков.

Первая часть этой книги ставит целью обеспечить Вас всеми теми знаниями, которые потребуются чтобы начать использовать стандартную конфигурацию Pylons для построения высококачественных по продуктивности веб-сайтов. В части 2 Вы узнаете о некоторых более передовых особенностях Pylons, таких как Юникод и поддержка интернационализации, Ajax и маршрутизация URL перед тем, как перейти к части 3, которая охватывает темы для экспертов, такие как шлюзовый интерфейс веб-сервера, аутентификация и авторизация, развертывание и регистрация.

Каждая глава будет выступать полным руководством по каждой из охваченных тем и будет содержать ссылки на области, куда Вы сможете обратиться за дальнейшей информацией. На протяжении всей книги мы также разработаем простое веб-сайтовое приложение под названием SimpleSite так, что Вы сможете увидеть, как принципы, описанные в каждой из глав, применяются в реальном приложении Pylons.

Старый способ: CGI-скрипты

Для того, чтобы понять, что именно представляет из себя Pylons и как он отличается от других фреймворков, мы взглянем на простой Python CGI-скрипт и проанализируем плюсы и минусы CGI-подхода. Затем мы посмотрим, как Pylons и другие фреймворки используют то, что должны предлагать CGI-скрипты. Наконец мы рассмотрим, как Pylons опережает другие фреймворки, предлагая для манипуляций модульные API, которые Вы можете использовать для расширения или изменения Pylons в своих собственных целях, когда традиционные настройки веб-фреймворка не полностью удовлетворяют Вашим потребностям.

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

Вот простой пример того способа, который обычно применялся при написании CGI-скриптов:

   1 #!/usr/bin/env python
   2 
   3 # Получение конфигурации для скрипта
   4 import ConfigParser
   5 config = ConfigParser.ConfigParser()
   6 config.read('/path/to/config.ini')
   7 
   8 # Если отладка разрешена, установить модуль cgitb
   9 if config.get('general', 'debug') == 'on':
  10         import cgitb; cgitb.enable()
  11 
  12 # Начало импортов, не зависимых от конфигурации
  13 import cgi
  14 import MySQLdb
  15 import os
  16 
  17 # Вывод HTTP-заголовков
  18 print "Content-type: text/html\n\n"
  19 
  20 # Вывод "шапки" HTML-страницы
  21 print "<html><head><title>Example</title></head>"
  22 print "<body><h1>Example</h1><p>Here are the comments:</p>"
  23 
  24 # Получение идентификатора из URL, основанного на переменной 
  25 # окружения QUERY_STRING, используя cgi-модуль
  26 fields = cgi.FieldStorage()
  27 page = int(fields['page'].value)
  28 
  29 # Выборка данных из базы
  30 connection = MySQLdb.connect(
  31         db=config.get('database', 'database'),
  32         user=config.get('database', 'user'),
  33         passwd=config.get('database', 'password'),
  34         host=config.get('database', 'host')
  35 )
  36 cursor = connection.cursor()
  37 cursor.execute("SELECT id, data FROM comment WHERE page=%s", (page,))
  38 results = cursor.fetchall()
  39 cursor.close()
  40 connection.close()
  41 
  42 # Вывод комментариев
  43 for id, data in results:
  44         print "<p>Commment #%s: %s</p>"%(id, cgi.escape(data))
  45 
  46 # Вывод остальной HTML-страницы
  47 print "</body></html>"

Скрипт отображал список комментариев тогда, когда был введен такой URL, как /cgi-bin/test.cgi?page=1. Вам также был нужен конфигурационный файл, который представлял собой что-то наподобие этого:

[general]
debug = off

[database]
database = dbname
host = localhost
user = james
password = somepassword

Код CGI-скрипта не такой изящный, каким бы он мог быть, но у него действительно есть некоторые достоинства. Давайте взглянем на плюсы и минусы. Сначала плюсы:

Сейчас некоторые из минусов:

Существуют также некоторые более тонкие проблемы при создании целого приложения как последовательности скриптов:

Для решения этих проблем Pylons (равно как и другие популярные фреймворки, такие как Django, TurboGears и Ruby on Rails) использует два основных способа:

Pylons также придает особое значение:

Мы рассмотрим каждую из этих идей в следующих разделах.

Архитектура "модель-представление-контроллер" (Model View Controller)

Паттерн (шаблон проектирования) "модель-представление-контроллер" (Model View Controller) - это результат признания того, что по своей сути, большинство веб-приложений полагаются на способность:

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

Эта архитектура очень успешна, потому что она не только отражает то, что происходит в большинстве веб-приложений, но также обеспечивает легкость поддержки Вашего приложения, так как Вы всегда знаете, где можно найти код, управляющий определенной стороной Вашего приложения. Например, Pylons использует язык шаблонов, называемый Mako, с целью помочь Вам с генерацией HTML и рекомендует объектно-реляционный преобразователь данных SQLAlchemy, чтобы оказать Вам помощь с моделью. Вы узнаете намного больше о моделях, контроллерах и представлениях в следующих разделах.

Осторожно

Те из вас, кто переходят к Pylons от Django, могли привыкнуть к подходу Django к архитектуре "модель-представление-контроллер" MVC (Model View Controller), которую они называют MTV (Model/Template/View)-"модель-шаблон-представление". Хотя концептуально архитектура довольна похожа на традиционный подход Pylons к MVC, существуют две ключевые разницы в терминологии:

  • Шаблон Django эквивалентен представлению Pylons
  • Представление Django равносильно контроллеру Pylons
  • Модель обрабатывается одинаково как в Django, так и в Pylons. На веб-сайте Django по адресу http://tinyurl.com/mnwg9 есть обсуждение причин Django на его терминологию.

Соглашения по конфигурации (Convention Over Configuration)

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

Имея это в виду, разработчики Pylons спроектировали фреймворк так, что автоматически предполагается, что когда Вы возвращаете данные, то это HTML данные, если Вы не укажете обратное. Это означает, что в общих случаях Вам не нужно настраивать Content-type, потому что по соглашению он будет text/html, если Вы не захотите изменить положение вещей.

Слабое связывание и четкое разделение

Веб-фреймворки, такие как Django и Ruby on Rails стали невероятно популярны за последние годы, потому что они обеспечивают структуру, которая возволяет Вам быстро создать красивые веб-сайты, определяя способ структурирования данных. Инструменты, которые они предоставляют, затем осуществляют работу над теми данными с целью либо автоматически генерировать код (scaffold в случае Ruby on Rails), либо создавать интерфейсы форм во время выполнения (как в случае с Django).

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

С одной стороны Pylons гораздо более слабо связан. По причине того, что он не предлагает инструментов для автоматической генерации почти законченного сайта для Вас из определения модели, он не требует сложного связующего кода, управляющего всем вместе. Вместо этого он предоставляет разумные низкоуровневые API и методологии, которые позволяют Вам быстро и легко связывать вместе составные части, которые Вы выбираете, чтобы использовать для себя.

Тем не менее, этот слабосвязанный подход не означает, что Вы должны кодировать абсолютно все для себя. Pylons использует соглашения по конфигурации (Convention Over Configuration) и допускает, что Вы захотите использовать стандартную схему при создании нового проекта. Если Вы не хотите стандартную схему, способ работы Pylons легко настроить. Например, по умолчанию Pylons использует структуру шаблонов, называемую Mako, чтобы помочь Вам генерировать шаблоны для Ваших представлений, но Вы не обязаны использовать ее. Путем настройки Вашего Pylons проекта Вы можете с легкостью использовать любой другой из главных языков шаблонов Python, включая Genshi, TAL или Breve, и все работают одинаково хорошо, потому что Pylons взаимодействует с каждым через стандартный API.

Другие возможности

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

Также они часто обеспечивают:

Pylons не является исключением и предоставляет инструменты и методологии для управления всеми этими вещами. Вы узнаете о каждом из них в продолжение курса книги.

Язык Python

Python - это превосходный язык для широчайшего круга задач программирования. Его легко выучить, и кроме того, он является достаточно мощным и выразительным для выполнения всех стилей работ. Он также замечателен для веб-программирования (имеются веские основания для того, что он является одним из трех официальных языков в Google). Однако, возможно, его ключевое достоинство заключается в том, что Python обладает большой поддержкой во всех популярных платформах, включая BSD, Linux, MacOS X и Windows и огромный ассортимент программных библиотек, уже доступных для использования, так что в большинстве своем Вы сможете найти подходящий инструмент для работы, которую Вы пытаетесь успешно выполнить, без необходимости написания его самому.

Если Вы еще не выучили Python, сейчас подходящее время для прочтения учебника по Python по адресу http://docs.python.org/tut/tut.html, который даст Вам все те знания, которые будут необходимы, чтобы начать разработку приложений при помощи Pylons.

Другой хороший источник информации для изучения Pylons - это книга Марка Пилгрима "Углубляемся в Python" (Dive Into Python), изданная в 2004. Она свободно доступна онлайн по адресу http://www.diveintopython.org/toc/index.html и немного более подробно предоставляет самообучение Python.

Python 3.0

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

К счастью, это не является проблемой, которая должна Вас очень волновать, по двум причинам:

Как только обнаружится достаточный спрос на Python 3.0 версию Pylons и достаточно зависимостей Pylons будет обновлено, команда Pylons планирует выпустить пару одинаковых по возможностям версий Pylons, одну для Python 2.6 и одну для Python 3.0 в соответствии с текущей рекоммендацией сообщества Python.

Python 2.6 будет включать возможность печати предупреждающих сообщений о любом коде, не совместимом с Python 3.0, так что Вы сможете запустить Ваш код на Pylons для Python 2.6, чтобы узнать, где могут быть какие-то проблемы, и затем после внесения изменений или запуска инструмента рефакторинга из2на3 Вы сможете запустить Ваш код на Pylons для Python 3.0.

Сообщество Pylons

Основная выгода при выборе Pylons заключается в том, что существует процветающее и успешное сообщество, построенное вокруг него. Стать активным членом сообщества Pylons легко, и мы всегда стремимся к увеличению количества участников сообщества.

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

Вики Pylons: http://wiki.pylonshq.com/

Официальная документация: http://wiki.pylonshq.com/display/pylonsdocs/

Сборник рецептов: http://wiki.pylonshq.com/display/pylonscookbook/

Для более непосредственной помощи, всегда действует почтовая рассылка обсуждения Pylons в группах Google (Google Groups), и обычно на Pylons freenode канале в IRC сидит довольно много людей, которые также рады Вам помочь.

IRC: #pylons во freenode

Почтовая рассылка: http://groups.google.com/pylons-discuss

Компоненты Pylons

В отличие от других фреймворков, где каждый компонент обычно встроен во фреймворк, а затем тесно объединен с другими компонентами фреймворка, Pylons более похож на коллекцию очень внимательно выбранных, разработанных третьей стороной программ. Вместо того, чтобы начинать с росписи на каждом из компонентов, составляющих Pylons, разработчики сотрудничали с существующими коллективами программистов, чтобы проектировать стандарты и API, которые позволят их программному обеспечению работать с Pylons.

Этот подход оказывается чрезвычайно полезным и имеет три основных преимущества:

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

Что предстоит

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

Книга разделена на три части: уровень для начинающих, Pylons для продвинутых пользователей и Pylons для экспертов. В части "Уровень для начинающих" Вы узнаете:

Мы также начнем с нашего образца - приложения, носящего название SimpleSite, так что Вы посмотрите на то, как методы, с которыми Вы ознакомились, работают в реальном приложении.

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

Затем мы вернемся к примеру SimpleSite и добавим навигационную иерархию, CSS и JavaScript к приложению-образцу, а также продемонстрируем некоторые продвинутые возможности SQLAlchemy, такие как наследование.

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

принципы различных способов написания веб-приложений, включая многопоточные, многопроцессные и асинхронные приложения, и почему большинство возможностей развертывания для Pylons являются многопоточным

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

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

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

Резюме

Эта глава дала Вам широкое понимание некоторых философий проектирования Pylons и того, что делает его немного отличным от других фреймворков, с которыми Вы, возможно, сталкивались.

Очевидно, что материала для изучения много, поэтому давайте приступим!

The_Definitive_Guide_to_Pylons/Введение_в_Pylons (последним исправлял пользователь alafin 2010-04-28 11:48:10)