Различия между версиями 2 и 3
Версия 2 от 2010-04-28 07:40:28
Размер: 9487
Редактор: alafin
Комментарий:
Версия 3 от 2010-04-28 07:49:08
Размер: 13981
Редактор: alafin
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 72: Строка 72:

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

{{{
[general]
debug = off

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

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

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

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

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

 * Написание кода доступа к базе данных очень часто повторяется, а структуры данных из базы не обязательно представляют объекты, с которыми Ваше приложение захочет иметь дело

 * CGI-скрипты могут быть медленными, потому что весь интерпретатор Python в целом, как и модули, используемые скриптом, требуют загрузки в память на каждом запросе

 * Дизайнерам покажется сложной смена темы сайта, так как код, генерирующий HTML, перемежается с кодом Python

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

 * Код часто дублируется в многочисленных скриптах

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

*Может быть сложно понять, как структурировано приложение в целом, потому что каждый скрипт может вести себя достаточно автономно

*URL-адреса в форме /cgi-bin/path/to/script.cgi?controller=page&action=view&id=3 не всегда отражают структуру Вашего веб-приложения и не так естественны для пользователя, как такой URL, как /page/view/3.

Для решения этих проблем Pylons (равно как и другие популярные фреймворки, такие как Django, TurboGears и Ruby on Rails) использует два основных способа:
Архитектура "модель-представление-контроллер" (Model View Controller)
Соглашения по конфигурации (Convention over configuration)
Pylons также придает особое значение:
Слабому связыванию и четкому разделению
Мы рассмотрим каждую из этих идей в следующих разделах.

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-скрипта не такой изящный, каким бы он мог быть, но у него действительно есть некоторые достоинства. Давайте взглянем на плюсы и минусы. Сначала плюсы:

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

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

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

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

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

*Может быть сложно понять, как структурировано приложение в целом, потому что каждый скрипт может вести себя достаточно автономно

*URL-адреса в форме /cgi-bin/path/to/script.cgi?controller=page&action=view&id=3 не всегда отражают структуру Вашего веб-приложения и не так естественны для пользователя, как такой URL, как /page/view/3.

Для решения этих проблем Pylons (равно как и другие популярные фреймворки, такие как Django, TurboGears и Ruby on Rails) использует два основных способа: Архитектура "модель-представление-контроллер" (Model View Controller) Соглашения по конфигурации (Convention over configuration) Pylons также придает особое значение: Слабому связыванию и четкому разделению Мы рассмотрим каждую из этих идей в следующих разделах.

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