Pyramid (программный каркас)

Pyramid (программный каркас)
Pyramid
Pyramid Logo.svg
Тип

Программный каркас веб-приложений

Разработчик

Бен Бангерт, Джеймс Гарднер

Операционная система

Кроссплатформенный

Первый выпуск

декабрь 2010 г.

Последняя версия

1.4 (18 декабря 2012 г.)

Лицензия

Лицензия BSD

Сайт

pylonsproject.com

Pyramid (англ. pyramid — пирамида) — программный каркас (фреймворк) для разработки веб-приложений с открытым исходным кодом, написанный на языке Python в рамках проекта Pylons[1].

Содержание

История

На создание Pyramid оказали влияние такие фреймворки, как Zope, Pylons и Django. Код Pyramid разрабатывался в проекте repoze.bfg, а название поменялось в результате слияния проектов BFG и Pylons.[2]

Основные принципы и понятия

Дизайн Pyramid основан на следующих принципах[3]:

  • простота,
  • минимализм,
  • документированность,
  • скорость,
  • надёжность,
  • открытость.

В защиту своего дизайна авторы Pyramid написали довольно большой документ, который призван развеять мифы о фреймворке. Например, на критику модели MVC в Pyramid следует подробное объяснение, что MVC «притянут за уши» к веб-приложениям. Следующая цитата[4] хорошо характеризует подход к терминологии в Pyramid:

«

Мы считаем, что есть только две вещи: ресурсы (resource) и виды (view). Дерево ресурсов представляет структуру сайта, а вид представляет ресурс. Шаблоны (template) в реальности лишь деталь реализации некоторого вида: строго говоря, они не обязательны, и вид может вернуть ответ (response) и без них. Нет никакого "контроллера" (controller): его просто не существует. "Модель" (model) же либо представлена деревом ресурсов, либо "доменной моделью" (domain model) (например, моделью SQLAlchemy), которая вообще не является частью каркаса. Нам кажется, что наша терминология более разумна при существующих ограничениях веб-технологий.

»

Возможности

Основными «изюминками» Pyramid являются[3]:

  • возможность написать приложение в одном файле;
  • конфигурация, основанная на декораторах;
  • формирование URL на ресурсы;
  • обслуживание запросов на статические файлы;
  • панель инструментов для отладки приложения прямо в браузере;
  • гибкая настройка отладки;
  • дополнительные модули;
  • виды (view) на основе как классов, так и функций;
  • конфигурирование файлов-ресурсов (assets), то есть, файлов проекта, не являющихся файлами с исходным кодом на Python;
  • расширяемые, взаимозаменяемые шаблоны (template);
  • система событий;
  • встроенная интернационализация (i18n);
  • кэширование HTTP;
  • встроенная поддержка сессий;
  • виды для исключений;
  • нет необходимости в одиночках (singleton);
  • предикаты видов и множественные виды для маршрута (route);
  • управление транзакциями, в том числе при работе сразу с несколькими базами данных;
  • расширяемость конфигурации через механизм включения (include);
  • гибкая, расширяемая аутентификация и авторизация;
  • возможность обхода (traversal) дерева ресурсов;
  • автоматизация повторяющейся конфигурации;
  • 100 % покрытие кода тестами;
  • поддержка пользователей (особенно начинающих) силами сообщества;
  • высокая документированность;
  • почти все компоненты перенесены и работают в Python3.2[5].

Разработка приложения

Хотя не составляет большой трудности написать Pyramid-приложение (проект) с нуля, Pyramid имеет инструменты для инициализации кода нового приложения по выбранному шаблону, или, в терминологии Pyramid, каркасной структуре (англ. scaffolds[6]). Например, в поставке имеются каркасные структуры для проектов, использующих ZODB или SQLAlchemy.

Проект — это каталог, содержащий по крайней мере один пакет на Python.

Типичная структура каталога для небольшого проекта:

MyProject/
|-- CHANGES.txt
|-- development.ini
|-- MANIFEST.in
|-- myproject
|   |-- __init__.py
|   |-- static
|   |   |-- favicon.ico
|   |   |-- logo.png
|   |   `-- pylons.css
|   |-- templates
|   |   `-- mytemplate.pt
|   |-- tests.py
|   `-- views.py
|-- production.ini
|-- README.txt
|-- setup.cfg
`-- setup.py

Приведённую структуру, как следует из документации, не следует сильно изменять, так как это может помешать другим разработчикам быстро ориентироваться в коде проекта[7]. Тем не менее, растущий проект может потребовать некоторых изменений. Например, виды, модели (если они используются) и тесты можно, разбив на модули, перенести соответственно в подкаталоги views, models и tests (не забыв снадбить их файлом __init__.py).

Проект может, например, находиться в составе buildout (скажем, в каталоге src), который собирает все необходимые компоненты вместе. Совсем необязательно, чтобы Pyramid-проект состоял из одного пакета. Величина проекта ограничивается только достаточностью знаний разработчиков о возможностях Pyramid[8].

Следует отметить, что Pyramid может работать с любым WSGI-сервером. Проекты, созданные по готовым каркасным структурам, используют сервер Waitress.

Диспетчеризация URL и обход дерева ресурсов

Каждый поступающий на сервер приложений Pyramid запрос (request) должен найти вид (view), который и будет его обрабатывать.

В Pyramid имеется два базовых подхода к поиску нужного вида для обрабатываемого запроса: на основе сопоставления (matching), как в большинстве подобных фреймворков, и обхода (traversal), как в Zope. Кроме того, в одном приложении можно с успехом сочетать оба подхода.

Простейший пример с заданием маршрута (заимствован из документации):

# Здесь config - экземпляр pyramid.config.Configurator
config.add_route('idea', 'site/{id}')
config.add_view('mypackage.views.site_view', route_name='idea')

Использование обхода лучше проиллюстрировать на небольшом примере:

from wsgiref.simple_server import make_server
from pyramid.config import Configurator
from pyramid.response import Response
 
# Класс некоторого ресурса
class Resource(dict):
    pass
 
# Дерево ресурсов (жёстко закодированное) в фабрике корня
def get_root(request):
    return Resource({'a': Resource({'b': Resource({'c': Resource()})})})
 
# Вид-для-вызова, который умеет показывать ресурс Resource (в context)
def hello_world_of_resources(context, request):
    output = "Ресурс и его дети: %s" % context
    return Response(output)
 
if __name__ == '__main__':
    config = Configurator(root_factory=get_root)
    config.add_view(hello_world_of_resources, context=Resource)
    app = config.make_wsgi_app()
    server = make_server('0.0.0.0', 8080, app)
    server.serve_forever()

В этом примере иерархия для обхода жестко задана в методе get_root с помощью вложенных словарей, тогда как реальные приложения должны сами определять необходимый доступ по ключам (метод __getitem__ помогает организовать такой доступ). В коде также присутствует корневая фабрика, с которой собственно и начинается обход узлов (node) дерева ресурсов. Вид-для-вызова (view callable) представлен функцией hello_world_of_resources. Говоря несколько упрощённо, на основе URL запроса в результате обхода иерархии Pyramid находит ресурс и применяет к нему «наилучший» вид-для-вызова (в нашем примере — он единственный).[9]

Конфигурирование

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

Императивное конфигурирование производится вызовами методов конфигуратора непосредственно перед стартом приложения.

Декларативное конфигурирование задается декораторами видов. Перед запуском приложение «сканируется» на предмет конфигурационных параметров методом scan() конфигуратора. Пример из документации:

from pyramid.response import Response
from pyramid.view import view_config
 
@view_config(name='hello', request_method='GET')
def hello(request):
    return Response('Hello')

Оба метода конфигурирования полностью взаимозаменяемы.[10]

Желающие могут использовать для конфигурирования ZCML, установив соответствующий пакет.

Генерация HTML

В Pyramid можно использовать различные движки для генерации HTML. Так, Chameleon и Mako входят в поставку.[11] Кроме них, можно подключить и другие, например, Jinja2.

Работа с формами может осуществляться, например, с помощью троицы Peppercorn-Colander-Deform.

Пример

Одно из наиболее простых приложений для Pyramid[12]:

from wsgiref.simple_server import make_server
from pyramid.config import Configurator
from pyramid.response import Response
 
def hello_world(request):
   return Response('Hello %(name)s!' % request.matchdict)
 
if __name__ == '__main__':
   config = Configurator()
   config.add_route('hello', '/hello/{name}')
   config.add_view(hello_world, route_name='hello')
   app = config.make_wsgi_app()
   server = make_server('0.0.0.0', 8080, app)
   server.serve_forever()

Применение

Примечания

Ссылки

Литература

  • Chris McDonough The Pyramid Web Application Development Framework: Version 1.0. — Agendaless Consulting, 2011. — 596 с. — ISBN 978-0615445670



Wikimedia Foundation. 2010.

Игры ⚽ Нужно решить контрольную?

Полезное


Смотреть что такое "Pyramid (программный каркас)" в других словарях:

  • Pyramid — (обычно от англ. pyramid, заимствованное от греч. πυραμίς). Pyramid  музыкальный альбом филиппинской певицы Charice. Pyramid  видеоигра начала 1990 х годов, сходная с тетрисом. Pyramid  программный каркас для разработки веб… …   Википедия

  • Pylons — Тип Программный каркас для создания веб приложений Разработчик Бен Бангерт, Джеймс Гарднер Операционная система Кроссплатформенный Последняя версия 1.3 ( …   Википедия

  • Grails — Тип программный каркас для создания веб приложений Разработчик Steven Devijver, Graeme Rocher Написана на Groovy Операционная система кроссп …   Википедия

  • CakePHP — Тип программный каркас для создания веб приложений (CMF) Разработчик Cake Software Foundation Операционная система Кроссплатформенное программное обеспечение Последняя версия …   Википедия

  • Catalyst — Это статья о веб фреймворке. О наборе системного ПО AMD/ATI см. ATI Catalyst. Catalyst Тип Программный каркас для создания веб приложений Разработчики Jonathan Rockway, David Kamholz, Brian Cassidy, Yuval Kogman, Matt S. Trout, Jesse Sheidlower,… …   Википедия

  • Kohana — Тип Программный каркас для создания веб приложений Разработчик Kohana Team[1] Написана на PHP Операционная сис …   Википедия

  • Zend Framework — Тип Программный каркас для создания веб приложений Разработчик Zend Technologies Операционная система Кроссплатформенное программное обеспечение Последняя версия …   Википедия

  • Yii — Тип Программный каркас для создания веб приложений Разработчик Yii dev …   Википедия

  • TurboGears — Тип Программный каркас для создания веб приложений Разработчик Кевин Дангур(Kevin Dangoor), Марк Рамм(Mark Ramm) Операционная система Кроссплатформенный Последняя версия …   Википедия

  • Zope — 2 Интерфейс управления Zope в окне веб браузера. Тип Сервер приложений …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»