Pyramid (веб-фреймворк): различия между версиями
[отпатрулированная версия] | [отпатрулированная версия] |
Gweorth (обсуждение | вклад) |
MBHbot (обсуждение | вклад) м →Литература: Project talk:Викификатор#Шаблон:Rq, replaced: {{rq|sources}} → {{подст:нет источников}} |
||
(не показана 21 промежуточная версия 17 участников) | |||
Строка 1: | Строка 1: | ||
⚫ | |||
{{Карточка программы |
{{Карточка программы |
||
| name = Pyramid |
|||
| logo = Pyramid Logo.svg |
|||
| released = {{s|[[декабрь]] [[2010]] г.}} |
|||
⚫ | |||
|latest_release_version=1.5 |
|||
⚫ | |||
|latest_release_date={{s|[[8 апреля]] [[2014]] г.}} |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
|license=[[Лицензия BSD]] |
|||
}} |
}} |
||
⚫ | '''Pyramid''' ({{lang-en|pyramid}} — пирамида) — [[Программный каркас|программный каркас (фреймворк)]] для разработки [[Веб-приложение|веб-приложений]] с [[Открытый исходный код|открытым исходным кодом]], написанный на языке [[Python]] в рамках проекта [[Pylons]]<ref>{{Cite web |url=http://pylonsproject.org/projects/pyramid/about |title=О фреймворке Pyramid |access-date=2012-07-08 |archive-date=2012-07-23 |archive-url=https://web.archive.org/web/20120723073941/http://www.pylonsproject.org/projects/pyramid/about |deadlink=no }}</ref>. |
||
⚫ | |||
⚫ | '''Pyramid''' ({{lang-en|pyramid}} — пирамида) — [[Программный каркас|программный каркас (фреймворк)]] для разработки [[Веб-приложение|веб-приложений]] с [[Открытый исходный код|открытым исходным кодом]], написанный на языке [[Python]] в рамках проекта [[Pylons]]<ref> |
||
== История == |
== История == |
||
На создание Pyramid оказали влияние такие фреймворки, как |
На создание Pyramid оказали влияние такие фреймворки, как |
||
[[Zope]], [[Pylons]] и [[Django]]. Код Pyramid разрабатывался в проекте repoze.bfg, а название поменялось в результате слияния проектов BFG и Pylons.<ref> |
[[Zope]], [[Pylons]] и [[Django]]. Код Pyramid разрабатывался в проекте repoze.bfg, а название поменялось в результате слияния проектов BFG и Pylons.<ref>{{Cite web |url=http://www.plope.com/bfg-becomes-pyramid |title=BFG переименован в Pyramid |accessdate=2012-07-08 |archiveurl=https://web.archive.org/web/20101113024153/http://plope.com/bfg-becomes-pyramid |archivedate=2010-11-13 |deadlink=yes }}</ref> |
||
== Основные принципы и понятия == |
== Основные принципы и понятия == |
||
⚫ | Дизайн Pyramid основан на следующих принципах<ref name=pyramidintro>{{Cite web |url=http://docs.pylonsproject.org/projects/pyramid/en/1.3-branch/narr/introduction.html |title=Ведение в Pyramid |access-date=2012-07-08 |archive-date=2012-06-15 |archive-url=https://web.archive.org/web/20120615102841/http://docs.pylonsproject.org/projects/pyramid/en/1.3-branch/narr/introduction.html |deadlink=no }}</ref>: |
||
⚫ | |||
* простота, |
* простота, |
||
Строка 31: | Строка 26: | ||
* открытость. |
* открытость. |
||
В защиту своего дизайна авторы Pyramid написали довольно большой документ, который призван развеять мифы о фреймворке. Например, на критику модели [[Model-View-Controller|MVC]] в Pyramid следует подробное объяснение, что MVC «притянут за уши» к веб-приложениям. Следующая цитата<ref> |
В защиту своего дизайна авторы Pyramid написали довольно большой документ, который призван развеять мифы о фреймворке. Например, на критику модели [[Model-View-Controller|MVC]] в Pyramid следует подробное объяснение, что MVC «притянут за уши» к веб-приложениям. Следующая цитата<ref>{{Cite web |url=http://docs.pylonsproject.org/projects/pyramid/en/1.3-branch/designdefense.html#pyramid-gets-its-terminology-wrong-mvc |title=Об «MVC» в Pyramid |access-date=2012-07-08 |archive-date=2012-06-15 |archive-url=https://web.archive.org/web/20120615083831/http://docs.pylonsproject.org/projects/pyramid/en/1.3-branch/designdefense.html#pyramid-gets-its-terminology-wrong-mvc |deadlink=no }}</ref> хорошо характеризует подход к терминологии в Pyramid: |
||
{{Цитата| |
{{Цитата| |
||
Мы считаем, что есть только две вещи: '''ресурсы''' (resource) и '''виды''' (view). '''Дерево ресурсов''' представляет структуру сайта, а вид представляет ресурс. '''Шаблоны''' (template) |
Мы считаем, что есть только две вещи: '''ресурсы''' (resource) и '''виды''' (view). '''Дерево ресурсов''' представляет структуру сайта, а вид представляет ресурс. '''Шаблоны''' (template) |
||
в реальности лишь деталь реализации некоторого вида: строго говоря, они не обязательны, и вид может вернуть '''ответ''' (response) и без них. Нет никакого |
в реальности лишь деталь реализации некоторого вида: строго говоря, они не обязательны, и вид может вернуть '''ответ''' (response) и без них. Нет никакого |
||
"контроллера" (controller): его просто не существует. "Модель" (model) же либо представлена деревом ресурсов, либо '''"доменной моделью"''' (domain model) (например, моделью SQLAlchemy), которая вообще не является частью каркаса. Нам кажется, что наша терминология более разумна при существующих ограничениях веб-технологий. |
"контроллера" (controller): его просто не существует. "Модель" (model) же либо представлена деревом ресурсов, либо '''"доменной моделью"''' (domain model) (например, моделью [[SQLAlchemy]]), которая вообще не является частью каркаса. Нам кажется, что наша терминология более разумна при существующих ограничениях веб-технологий. |
||
{{oq|en| |
{{oq|en| |
||
...[We] say there are two things: resources and views. The resource tree represents a site structure, the view presents a resource. The templates are really just an implementation detail of any given view: a view doesn’t need a template to return a response. There’s no “controller”: it just doesn’t exist. The “model” is either represented by the resource tree or by a “domain model” (like a SQLAlchemy model) that is separate from the framework entirely. This seems to us like more reasonable terminology, given the current constraints of the web. |
...[We] say there are two things: resources and views. The resource tree represents a site structure, the view presents a resource. The templates are really just an implementation detail of any given view: a view doesn’t need a template to return a response. There’s no “controller”: it just doesn’t exist. The “model” is either represented by the resource tree or by a “domain model” (like a SQLAlchemy model) that is separate from the framework entirely. This seems to us like more reasonable terminology, given the current constraints of the web. |
||
Строка 42: | Строка 37: | ||
== Возможности == |
== Возможности == |
||
⚫ | |||
⚫ | |||
* возможность написать приложение в одном файле; |
* возможность написать приложение в одном файле; |
||
* конфигурация, основанная на [[Python# |
* конфигурация, основанная на [[Python#Декораторы|декораторах]]; |
||
* формирование [[URL]] на ресурсы; |
* формирование [[URL]] на ресурсы; |
||
* обслуживание запросов на статические файлы; |
* обслуживание запросов на статические файлы; |
||
Строка 70: | Строка 64: | ||
* поддержка пользователей (особенно начинающих) силами сообщества; |
* поддержка пользователей (особенно начинающих) силами сообщества; |
||
* высокая документированность; |
* высокая документированность; |
||
* почти все компоненты перенесены и работают в Python3.2<ref> |
* почти все компоненты перенесены и работают в Python3.2<ref>{{Cite web |url=https://github.com/Pylons/pyramid/wiki/Python-3-Porting |title=Перенос на Python 3 |access-date=2012-07-08 |archive-date=2020-10-01 |archive-url=https://web.archive.org/web/20201001074136/https://github.com/Pylons/pyramid/wiki/Python-3-Porting |deadlink=no }}</ref>. |
||
== Использование каркаса для разработки приложения == |
== Использование каркаса для разработки приложения == |
||
Строка 100: | Строка 94: | ||
</source> |
</source> |
||
Приведённую структуру, как следует из документации, не следует сильно изменять, так как это может помешать другим разработчикам быстро ориентироваться в коде проекта<ref> |
Приведённую структуру, как следует из документации, не следует сильно изменять, так как это может помешать другим разработчикам быстро ориентироваться в коде проекта<ref>{{Cite web |url=http://docs.pylonsproject.org/projects/pyramid/en/1.3-branch/narr/project.html#the-project-structure |title=Структура Pyramid-проекта |access-date=2012-07-09 |archive-date=2012-06-22 |archive-url=https://web.archive.org/web/20120622121255/http://docs.pylonsproject.org/projects/pyramid/en/1.3-branch/narr/project.html#the-project-structure |deadlink=no }}</ref>. Тем не менее, растущий проект может потребовать некоторых изменений. Например, виды, модели (если они используются) и тесты можно, разбив на модули, перенести соответственно в подкаталоги views, models и tests (не забыв снадбить их файлом <code>__init__.py</code>). |
||
Проект может, например, находиться в составе [[buildout]] (скажем, в каталоге src), который собирает все необходимые компоненты вместе. Совсем необязательно, чтобы Pyramid-проект состоял из одного пакета. Величина проекта ограничивается только достаточностью знаний разработчиков о возможностях Pyramid<ref> |
Проект может, например, находиться в составе [[buildout]] (скажем, в каталоге src), который собирает все необходимые компоненты вместе. Совсем необязательно, чтобы Pyramid-проект состоял из одного пакета. Величина проекта ограничивается только достаточностью знаний разработчиков о возможностях Pyramid<ref>{{Cite web |url=http://pyramid.readthedocs.org/en/1.3-branch/narr/introduction.html#what-makes-pyramid-unique |title=Об уникальных чертах Pyramid |access-date=2012-07-09 |archive-date=2014-09-12 |archive-url=https://web.archive.org/web/20140912042150/http://pyramid.readthedocs.org/en/1.3-branch/narr/introduction.html#what-makes-pyramid-unique |deadlink=no }}</ref>. |
||
Pyramid может работать с любым [[WSGI]]-сервером. Проекты, созданные по готовым каркасным структурам, используют сервер Waitress. |
|||
== Диспетчеризация URL и обход дерева ресурсов == |
== Диспетчеризация URL и обход дерева ресурсов == |
||
Каждый поступающий на сервер приложений Pyramid запрос (request) должен найти вид (view), который и будет его обрабатывать. |
Каждый поступающий на сервер приложений Pyramid запрос (request) должен найти вид (view), который и будет его обрабатывать. |
||
Строка 148: | Строка 141: | ||
</source> |
</source> |
||
В этом примере иерархия для обхода жестко задана в методе <code>get_root</code> с помощью вложенных словарей, тогда как реальные приложения должны сами определять необходимый доступ по ключам (метод <code>__getitem__</code> помогает организовать такой доступ). В коде также присутствует корневая '''фабрика''', с которой собственно и начинается обход '''узлов''' (node) дерева ресурсов. '''Вид-для-вызова''' (view callable) представлен функцией <code>hello_world_of_resources</code>. Говоря несколько упрощённо, на основе URL запроса в результате обхода иерархии Pyramid находит ресурс и применяет к нему «наилучший» вид-для-вызова (в нашем примере — он единственный).<ref> |
В этом примере иерархия для обхода жестко задана в методе <code>get_root</code> с помощью вложенных словарей, тогда как реальные приложения должны сами определять необходимый доступ по ключам (метод <code>__getitem__</code> помогает организовать такой доступ). В коде также присутствует корневая '''фабрика''', с которой собственно и начинается обход '''узлов''' (node) дерева ресурсов. '''Вид-для-вызова''' (view callable) представлен функцией <code>hello_world_of_resources</code>. Говоря несколько упрощённо, на основе URL запроса в результате обхода иерархии Pyramid находит ресурс и применяет к нему «наилучший» вид-для-вызова (в нашем примере — он единственный).<ref>{{Cite web |url=http://pyramid.readthedocs.org/en/1.3-branch/narr/traversal.html#a-description-of-the-traversal-algorithm |title=Алгоритм обхода |access-date=2012-07-09 |archive-date=2012-06-10 |archive-url=https://web.archive.org/web/20120610233722/http://pyramid.readthedocs.org/en/1.3-branch/narr/traversal.html#a-description-of-the-traversal-algorithm |deadlink=no }}</ref> |
||
== Конфигурирование == |
== Конфигурирование == |
||
Конфигурирование приложения, то есть, задание настроек, влияющих на его работу, может осуществляться в Pyramid двумя способами: императивным и декларативным. |
Конфигурирование приложения, то есть, задание настроек, влияющих на его работу, может осуществляться в Pyramid двумя способами: императивным и декларативным. |
||
Строка 168: | Строка 160: | ||
</source> |
</source> |
||
Оба метода конфигурирования полностью взаимозаменяемы.<ref> |
Оба метода конфигурирования полностью взаимозаменяемы.<ref>{{Cite web |url=http://docs.pylonsproject.org/projects/pyramid/en/1.3-branch/narr/configuration.html |title=О конфигурировании |access-date=2012-07-08 |archive-date=2012-06-15 |archive-url=https://web.archive.org/web/20120615101721/http://docs.pylonsproject.org/projects/pyramid/en/1.3-branch/narr/configuration.html |deadlink=no }}</ref> |
||
Желающие могут использовать для конфигурирования [[ZCML]], установив соответствующий пакет. |
Желающие могут использовать для конфигурирования [[ZCML]], установив соответствующий пакет. |
||
== Генерация HTML == |
== Генерация HTML == |
||
⚫ | В Pyramid можно использовать различные движки для генерации HTML. Так, [[Chameleon]] и [[Mako]] входят в поставку.<ref>{{Cite web |url=http://docs.pylonsproject.org/projects/pyramid/en/1.0-branch/narr/templates.html |title=Движки шаблонов |access-date=2012-07-09 |archive-date=2012-06-15 |archive-url=https://web.archive.org/web/20120615083409/http://docs.pylonsproject.org/projects/pyramid/en/1.0-branch/narr/templates.html |deadlink=no }}</ref> Кроме них, можно подключить и другие, например, [[Jinja2]]. |
||
⚫ | |||
Работа с формами может осуществляться, например, с помощью троицы Peppercorn-Colander-Deform. |
Работа с формами может осуществляться, например, с помощью троицы Peppercorn-Colander-Deform. |
||
== Пример == |
== Пример == |
||
⚫ | Одно из наиболее простых приложений для Pyramid<ref>{{Cite web |url=http://docs.pylonsproject.org/en/latest/docs/pyramid.html |title=Документация по Pyramid. |access-date=2012-07-08 |archive-date=2012-06-29 |archive-url=https://web.archive.org/web/20120629133734/http://docs.pylonsproject.org/en/latest/docs/pyramid.html |deadlink=no }}</ref>: |
||
⚫ | |||
<source lang="python"> |
<source lang="python"> |
||
Строка 200: | Строка 190: | ||
== Применение == |
== Применение == |
||
* {{cite web |title = Проект KARL |url = http://karlproject.org/architecture.html |archiveurl = https://web.archive.org/web/20120429012802/http://karlproject.org/architecture.html |archivedate = 2012-04-29 |deadlink = yes }} |
|||
* [http://karlproject.org/architecture.html Проект KARL] |
|||
== Примечания == |
== Примечания == |
||
Строка 206: | Строка 196: | ||
== Ссылки == |
== Ссылки == |
||
* Chris McDonough, [http://static.pylonsproject.org/pyramid-1.1.pdf The Pyramid Web Application Development Framework] ([[PDF]]){{ref-en}} |
* Chris McDonough, [http://static.pylonsproject.org/pyramid-1.1.pdf The Pyramid Web Application Development Framework] ([[PDF]]){{ref-en}} |
||
* [http://docs.pylonsproject.org/projects/pyramid_cookbook/en/latest/ Pyramid Cookbook]{{ref-en}} |
* [http://docs.pylonsproject.org/projects/pyramid_cookbook/en/latest/ Pyramid Cookbook]{{ref-en}} |
||
Строка 215: | Строка 204: | ||
|автор = Chris McDonough |
|автор = Chris McDonough |
||
|заглавие = The Pyramid Web Application Development Framework: Version 1.0 |
|заглавие = The Pyramid Web Application Development Framework: Version 1.0 |
||
|ссылка = https://archive.org/details/pyramidwebframework |
|||
|издательство = Agendaless Consulting |
|издательство = Agendaless Consulting |
||
|год = 2011 |
|год = 2011 |
||
Строка 221: | Строка 211: | ||
}} |
}} |
||
{{Нет источников |дата=2024-10-19}} |
|||
{{rq|sources}} |
|||
{{Python}} |
{{Python}} |
||
{{Фреймворки для веб приложений}} |
|||
[[Категория:Серверы приложений]] |
[[Категория:Серверы приложений]] |
||
[[Категория:Свободное программное обеспечение, написанное на Python]] |
[[Категория:Свободное программное обеспечение, написанное на Python]] |
||
[[Категория: |
[[Категория:Веб-фреймворки на Python]] |
||
[[Категория:Свободные библиотеки программ]] |
[[Категория:Свободные библиотеки программ]] |
||
[[Категория:Библиотеки Python]] |
[[Категория:Библиотеки Python]] |
||
Строка 233: | Строка 222: | ||
[[Категория:Свободное кроссплатформенное программное обеспечение]] |
[[Категория:Свободное кроссплатформенное программное обеспечение]] |
||
[[Категория:Статьи с примерами кода Python]] |
[[Категория:Статьи с примерами кода Python]] |
||
[[en:Pylons project#Pyramid]] |
Текущая версия от 10:15, 19 октября 2024
Pyramid | |
---|---|
Тип | Программный каркас веб-приложений |
Разработчики | Бен Бангерт, Джеймс Гарднер |
Написана на | Python |
Операционная система | Кроссплатформенный |
Первый выпуск | декабрь 2010 г. |
Последняя версия |
|
Репозиторий | github.com/Pylons/pyramid |
Лицензия | Repoze Public License[вд][2] |
Сайт | pylonsproject.com |
Pyramid (англ. pyramid — пирамида) — программный каркас (фреймворк) для разработки веб-приложений с открытым исходным кодом, написанный на языке Python в рамках проекта Pylons[3].
История
[править | править код]На создание Pyramid оказали влияние такие фреймворки, как Zope, Pylons и Django. Код Pyramid разрабатывался в проекте repoze.bfg, а название поменялось в результате слияния проектов BFG и Pylons.[4]
Основные принципы и понятия
[править | править код]Дизайн Pyramid основан на следующих принципах[5]:
- простота,
- минимализм,
- документированность,
- скорость,
- надёжность,
- открытость.
В защиту своего дизайна авторы Pyramid написали довольно большой документ, который призван развеять мифы о фреймворке. Например, на критику модели MVC в Pyramid следует подробное объяснение, что MVC «притянут за уши» к веб-приложениям. Следующая цитата[6] хорошо характеризует подход к терминологии в Pyramid:
Мы считаем, что есть только две вещи: ресурсы (resource) и виды (view). Дерево ресурсов представляет структуру сайта, а вид представляет ресурс. Шаблоны (template)
в реальности лишь деталь реализации некоторого вида: строго говоря, они не обязательны, и вид может вернуть ответ (response) и без них. Нет никакого "контроллера" (controller): его просто не существует. "Модель" (model) же либо представлена деревом ресурсов, либо "доменной моделью" (domain model) (например, моделью SQLAlchemy), которая вообще не является частью каркаса. Нам кажется, что наша терминология более разумна при существующих ограничениях веб-технологий.
Оригинальный текст (англ.)...[We] say there are two things: resources and views. The resource tree represents a site structure, the view presents a resource. The templates are really just an implementation detail of any given view: a view doesn’t need a template to return a response. There’s no “controller”: it just doesn’t exist. The “model” is either represented by the resource tree or by a “domain model” (like a SQLAlchemy model) that is separate from the framework entirely. This seems to us like more reasonable terminology, given the current constraints of the web.
Возможности
[править | править код]Основными преимуществами Pyramid являются[5]:
- возможность написать приложение в одном файле;
- конфигурация, основанная на декораторах;
- формирование URL на ресурсы;
- обслуживание запросов на статические файлы;
- панель инструментов для отладки приложения прямо в браузере;
- гибкая настройка отладки;
- дополнительные модули;
- виды (view) на основе как классов, так и функций;
- конфигурирование файлов-ресурсов (assets), то есть, файлов проекта, не являющихся файлами с исходным кодом на Python;
- расширяемые, взаимозаменяемые шаблоны (template);
- система событий;
- встроенная интернационализация (i18n);
- кэширование HTTP;
- встроенная поддержка сессий;
- виды для исключений;
- нет необходимости в одиночках (singleton);
- предикаты видов и множественные виды для маршрута (route);
- управление транзакциями, в том числе при работе сразу с несколькими базами данных;
- расширяемость конфигурации через механизм включения (include);
- гибкая, расширяемая аутентификация и авторизация;
- возможность обхода (traversal) дерева ресурсов;
- автоматизация повторяющейся конфигурации;
- 100 % покрытие кода тестами;
- поддержка пользователей (особенно начинающих) силами сообщества;
- высокая документированность;
- почти все компоненты перенесены и работают в Python3.2[7].
Использование каркаса для разработки приложения
[править | править код]Хотя не составляет большой трудности написать Pyramid-приложение (проект) с нуля, Pyramid имеет инструменты для инициализации кода нового приложения по выбранному шаблону, или, в терминологии Pyramid, каркасной структуре (англ. scaffolds[8]). Например, в поставке имеются каркасные структуры для проектов, использующих 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
Приведённую структуру, как следует из документации, не следует сильно изменять, так как это может помешать другим разработчикам быстро ориентироваться в коде проекта[9]. Тем не менее, растущий проект может потребовать некоторых изменений. Например, виды, модели (если они используются) и тесты можно, разбив на модули, перенести соответственно в подкаталоги views, models и tests (не забыв снадбить их файлом __init__.py
).
Проект может, например, находиться в составе buildout (скажем, в каталоге src), который собирает все необходимые компоненты вместе. Совсем необязательно, чтобы Pyramid-проект состоял из одного пакета. Величина проекта ограничивается только достаточностью знаний разработчиков о возможностях Pyramid[10].
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 находит ресурс и применяет к нему «наилучший» вид-для-вызова (в нашем примере — он единственный).[11]
Конфигурирование
[править | править код]Конфигурирование приложения, то есть, задание настроек, влияющих на его работу, может осуществляться в 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')
Оба метода конфигурирования полностью взаимозаменяемы.[12]
Желающие могут использовать для конфигурирования ZCML, установив соответствующий пакет.
Генерация HTML
[править | править код]В Pyramid можно использовать различные движки для генерации HTML. Так, Chameleon и Mako входят в поставку.[13] Кроме них, можно подключить и другие, например, Jinja2.
Работа с формами может осуществляться, например, с помощью троицы Peppercorn-Colander-Deform.
Пример
[править | править код]Одно из наиболее простых приложений для Pyramid[14]:
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()
Применение
[править | править код]- Проект KARL . Архивировано из оригинала 29 апреля 2012 года.
Примечания
[править | править код]- ↑ Release 2.0.2 — 2023.
- ↑ https://github.com/Pylons/pyramid/blob/main/LICENSE.txt
- ↑ О фреймворке Pyramid . Дата обращения: 8 июля 2012. Архивировано 23 июля 2012 года.
- ↑ BFG переименован в Pyramid . Дата обращения: 8 июля 2012. Архивировано из оригинала 13 ноября 2010 года.
- ↑ 1 2 Ведение в Pyramid . Дата обращения: 8 июля 2012. Архивировано 15 июня 2012 года.
- ↑ Об «MVC» в Pyramid . Дата обращения: 8 июля 2012. Архивировано 15 июня 2012 года.
- ↑ Перенос на Python 3 . Дата обращения: 8 июля 2012. Архивировано 1 октября 2020 года.
- ↑ подобно скаффолдингу
- ↑ Структура Pyramid-проекта . Дата обращения: 9 июля 2012. Архивировано 22 июня 2012 года.
- ↑ Об уникальных чертах Pyramid . Дата обращения: 9 июля 2012. Архивировано 12 сентября 2014 года.
- ↑ Алгоритм обхода . Дата обращения: 9 июля 2012. Архивировано 10 июня 2012 года.
- ↑ О конфигурировании . Дата обращения: 8 июля 2012. Архивировано 15 июня 2012 года.
- ↑ Движки шаблонов . Дата обращения: 9 июля 2012. Архивировано 15 июня 2012 года.
- ↑ Документация по Pyramid. Дата обращения: 8 июля 2012. Архивировано 29 июня 2012 года.
Ссылки
[править | править код]- Chris McDonough, The Pyramid Web Application Development Framework (PDF) (англ.)
- Pyramid Cookbook (англ.)
- Pyramid Single File Tasks Tutorial (англ.) Небольшое учебное руководство по Pyramid
Литература
[править | править код]- Chris McDonough. The Pyramid Web Application Development Framework: Version 1.0. — Agendaless Consulting, 2011. — 596 с. — ISBN 978-0615445670.
В статье не хватает ссылок на источники (см. рекомендации по поиску). |
- Программное обеспечение по алфавиту
- Программное обеспечение, разработанное в 2010 году
- Серверы приложений
- Свободное программное обеспечение, написанное на Python
- Веб-фреймворки на Python
- Свободные библиотеки программ
- Библиотеки Python
- Программное обеспечение с лицензией BSD
- Свободное кроссплатформенное программное обеспечение