pyramid (http://www.pylonsproject.org/). Этот фреймворк появился из более ран-
ран-
него проекта pylons, с точки зрения функционала он похож на django.
turbogears (http://turbogears.org/). Этот фреймворк поддерживает ORM, множе-
ство баз данных и несколько языков шаблонов.
wheezy.web (http://pythonhosted.org/wheezy.web/). Этот более молодой фреймворк
оптимизирован для повышения производительности. Недавние исследования
показали, что он работает быстрее других.
Вы можете сравнить фреймворки с помощью онлайн-таблицы по адресу http://
bit.ly/web-frames.
Если вы хотите создать сайт, работающий с реляционной базой данных, вам
не обязательно пользоваться одним из этих крупных фреймворков. Можете вос-
пользоваться Bottle, Flask или каким-нибудь другим простым фреймворком и мо-
дулями работы с базами данных вроде SQLAlchemy, чтобы сгладить разногласия.
Далее вам нужно будет написать обычный код SQL вместо специфического кода
ORM, так как большинство разработчиков знают SQL, а не некий определенный
синтаксис ORM.
Кроме того, ничто не заставляет вас выбирать именно реляционную базу данных.
Если схема ваших данных может значительно изменяться — графы явно различа-
ются в разных рядах, — вам стоит выбрать базу данных, не имеющую схемы, вроде
баз данных NoSQL, которые мы рассматривали в разделе «Хранилища данных
NoSQL» главы 8. Однажды я работал над сайтом, который изначально хранил
данные в базе данных NoSQL, затем переключался на одну реляционную базу
данных, затем на другую реляционную базу данных, затем на другую базу данных
NoSQL и, наконец, возвращался к одной из реляционных.
276
Глава 9. Распутываем Всемирную паутину
Другие веб-серверы Python
Далее перечислены некоторые независимые WSGI-серверы, написанные на Python,
которые работают как Apache или Nginx и используют несколько процессов и/или
потоков (смотрите раздел «Конкуренция» главы 11) для обработки одновремен-
ных запросов:
uwsgi (http://projects.unbit.it/uwsgi/);
cherrypy (http://www.cherrypy.org/);
pylons (http://www.pylonsproject.org/).
Далее перед вами серверы, основанные на событиях, которые пользуются одним
процессом, но избегают блокирования любым одиночным запросом:
tornado (http://www.tornadoweb.org/);
gevent (http://gevent.org/);
gunicorn (http://gunicorn.org/).
О событиях я поговорю подробнее в разделе о конкуренции в главе 11.
Веб-сервисы и автоматизация
Только что мы рассмотрели традиционные веб-клиенты и серверные приложения,
потребляющие и генерирующие HTML-страницы. Всемирная паутина оказалась
мощным способом объединять приложения и данные во многих форматах, не толь-
ко HTML.
Модуль webbrowser
Начнем с небольшого сюрприза. Запустите сессию Python в окне терминала и вве-
дите следующую строку: