Открыть сервис

Фреймворк Pyramid

Pyramid — это веб-фреймворк общего назначения с открытым исходным кодом, написанный на языке Python. Он входит в семейство «фреймворков с малым весом» (microframeworks) и предназначен для создания веб-приложений любого масштаба — от простых одностраничных сайтов до сложных, высоконагруженных корпоративных систем. Pyramid отличается гибкостью, модульностью и минимальным количеством обязательных требований к структуре проекта, что позволяет разработчику выбирать компоненты (шаблонизатор, ORM, механизм авторизации) по своему усмотрению.

История

Pyramid был создан в 2010 году в результате слияния двух проектов: repoze.bfg (разрабатывался компанией Agendaless Consulting) и Pylons (популярный веб-фреймворк, созданный Беном Бенгфортом). Разработчики стремились объединить лучшие черты обоих фреймворков: простоту и гибкость Pylons с мощной архитектурой и документацией repoze.bfg. Первый стабильный релиз (Pyramid 1.0) состоялся в декабре 2010 года. Проект поддерживается некоммерческой организацией Pylons Project, которая также курирует фреймворки TurboGears и WebOb.

С момента выхода Pyramid прошёл несколько крупных обновлений. Версия 1.5 (2013) добавила поддержку Python 3, версия 1.10 (2019) — улучшенную поддержку асинхронности, а версия 2.0 (2021) полностью отказалась от поддержки Python 2.7. На 2024 год актуальной стабильной версией является Pyramid 2.0.2.

Архитектура и принципы

Pyramid построен на архитектурном паттерне «Модель-Представление-Контроллер» (MVC), хотя в документации чаще используется термин «Модель-Представление-Шаблон» (MVT), так как контроллер в Pyramid реализован через маршрутизацию и обработчики запросов. Ключевые принципы фреймворка:

  • Минимализм по умолчанию. Pyramid не навязывает разработчику конкретную библиотеку для работы с базой данных, шаблонизатор или систему аутентификации. Всё это подключается по мере необходимости через пакеты расширений (add-ons).
  • Конфигурация через код. Настройки приложения (маршруты, представления, права доступа) задаются в Python-коде, а не в XML или YAML-файлах. Это позволяет использовать все возможности языка (условные операторы, циклы, импорты) при конфигурировании.
  • Декларативная и императивная конфигурация. Разработчик может задавать маршруты как через декораторы (декларативно), так и через вызовы методов (императивно). Оба подхода взаимозаменяемы.
  • Инверсия управления (IoC). Pyramid использует контейнер зависимостей, который автоматически внедряет необходимые объекты (например, запрос, сессию, настройки) в функции-обработчики.

Компоненты

Маршрутизация

Pyramid поддерживает два основных механизма маршрутизации: URL-диспетчеризацию (traversal) и конфигурацию маршрутов (route configuration). URL-диспетчеризация основана на иерархии объектов (ресурсов) и часто используется в приложениях с чёткой древовидной структурой (например, CMS). Конфигурация маршрутов — более привычный для веб-разработчиков подход, при котором URL-шаблоны связываются с функциями-обработчиками. Пример:

```python from pyramid.config import Configurator from pyramid.response import Response

def hello_world(request): return Response('Hello, World!')

if __name__ == '__main__': config = Configurator() config.add_route('hello', '/') config.add_view(hello_world, route_name='hello') config.make_wsgi_app() ```

Представления (Views)

Представления — это функции или классы, которые принимают объект запроса (request) и возвращают объект ответа (response). Pyramid поддерживает несколько типов представлений: обычные функции, классы с методами (например, __call__), а также встроенные представления для статических файлов и ошибок. Представления могут быть привязаны к маршрутам, а также к типам контента (через предикаты).

Шаблонизаторы

Pyramid не имеет встроенного шаблонизатора, но поддерживает интеграцию с любыми популярными библиотеками: Chameleon (рекомендуемый, основан на XML), Mako (с синтаксисом, похожим на Python), Jinja2 (широко используемый в сообществе), а также string.Template из стандартной библиотеки. Подключение шаблонизатора происходит через пакет расширения, например pyramid_chameleon.

Аутентификация и авторизация

Pyramid предоставляет гибкую систему управления доступом. Аутентификация (проверка подлинности пользователя) реализуется через политики аутентификации (например, AuthTktAuthenticationPolicy для cookie-сессий или BasicAuthAuthenticationPolicy для HTTP Basic Auth). Авторизация (проверка прав доступа) основана на системе разрешений (permissions) и контекстов (contexts). Разработчик может задать права на уровне маршрута или ресурса, а также определить собственные политики авторизации.

Поддержка асинхронности

Начиная с версии 1.10, Pyramid поддерживает асинхронные представления (на основе async/await). Это позволяет обрабатывать запросы без блокировки основного потока, что полезно для приложений с длительными операциями (например, запросы к внешним API). Для работы с асинхронностью требуется сервер приложений, поддерживающий ASGI (например, Uvicorn), хотя Pyramid по-прежнему может работать и через WSGI.

Применение

Pyramid используется в различных проектах, где требуется гибкость и контроль над архитектурой. Примеры:

  • Kottiсистема управления контентом (CMS) на основе Pyramid.
  • Substance D — фреймворк для создания веб-приложений с богатым пользовательским интерфейсом.
  • Mozilla — некоторые внутренние сервисы Mozilla (например, система управления проектами) написаны на Pyramid.
  • Научные и исследовательские проекты — благодаря модульности и поддержке сложных иерархий ресурсов, Pyramid часто выбирают для создания порталов данных и аналитических платформ.

Сравнение с другими фреймворками

Pyramid часто сравнивают с Django и Flask — двумя другими популярными веб-фреймворками на Python.

ХарактеристикаPyramidDjangoFlask
Размер ядраМаленький, минималистичныйБольшой, «всё включено»Очень маленький, микрофреймворк
Обязательные компонентыНет (ORM, шаблонизатор, админка — опционально)Есть (ORM, шаблонизатор, админка, формы)Нет (ORM, шаблонизатор — опционально)
ГибкостьВысокая (можно менять любой компонент)Средняя (многие компоненты жёстко связаны)Высокая (но меньше встроенных возможностей)
Кривая обученияСредняя (требует понимания архитектуры)Низкая (много готовых решений)Низкая (простые примеры)
Поддержка асинхронностиДа (с версии 1.10)Да (с версии 3.0)Да (через расширения)
ПопулярностьНиже, чем у Django и FlaskОчень высокаяВысокая

Pyramid занимает нишу между Django (который предоставляет всё «из коробки») и Flask (который требует больше ручной настройки). Он подходит для проектов, где важна гибкость, но не хочется писать всё с нуля, как в Flask.

Интересные факты

  • Название «Pyramid» отсылает к египетским пирамидам, символизируя прочность и масштабируемость фреймворка.
  • Pyramid — один из немногих веб-фреймворков, который поддерживает как WSGI, так и ASGI (через библиотеку pyramid_asgi).
  • В документации Pyramid активно используется концепция «ресурсов» (resources), что делает его особенно удобным для создания систем управления контентом и порталов данных.
  • Сообщество Pyramid невелико, но активно; проект регулярно обновляется и имеет подробную документацию (около 500 страниц).

Источники

  • Официальная документация Pyramid (docs.pylonsproject.org)
  • «Pyramid Web Framework» — книга Криса Макдонаха (O'Reilly Media, 2013)
  • Репозиторий Pyramid на GitHub (github.com/Pylons/pyramid)
  • Статья «Pyramid vs Django vs Flask» на сайте Real Python (realpython.com)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →