Пирамида: эквивалент MVC в PHP Frameworks в Pyramid/Python?

Каковы эквиваленты Pyramid/Python для Model-View - Контроллер фреймворков PHP, таких как Kohana?

In Pyramid "Model" is .... and it is used for .....
In Pyramid "View" is .... and it is used for .....
In Pyramid "Controller" is .... and it is used for .....

Я пытаюсь понять логику пирамиды. В дополнение к ответу, любая помощь, документация и т.д. будут оценены.

Спасибо.

Ответ 1

Пилоны, одна из двух фреймворков, которые соединялись вместе с Pyramid (другая была repoze.bfg), была "близка" к системе MVC.

Я положил конец цитатам, потому что за последние несколько лет многие люди боролись о том, что означает MVC... и многие проекты, которые когда-то рекламировали себя как "MVC", начали называть их "MTC" (шаблон модели контроллер) "MT" (шаблон модели) или "MV" (вид модели). Все согласны с тем, что такое "модель", но именно то, что отображает "вид" и "контроллер" на данной структуре, может быть точкой раздора.

Пирамида и пилоны имеют функциональность "диспетчера" для настройки отображения для запроса. Под pylons его в config/routes.py; под Pyramid это немного отличается - по умолчанию леса имеют маршрутизацию в app/ init.py, но вы можете разбить ее на app/routes.py или использовать config.include() чтобы вставить его в "обработчики" или config.scan(), чтобы вытащить его из ваших "представлений".

"обработчики" в пирамиде предоставлены pyramid_handlers, и на самом деле это просто "взгляды" с кучей материалов для автоматического генерации. Если бы вы захотели, ваши приложения могли использовать как обработчики, так и представления (мои).

В любом случае, в зависимости от того, как вы интерпретируете MVC/MTC/etc, это свободная таблица того, что вам может понадобиться:

           || mvt            | mvc            | mvc
==========================================================================
model      || sqlalchemy     | sqlalchemy     | sqlalchemy
view       || views/handlers | templates      | views/handlers + templates
controller ||                | views/handlers | dispatch/routing
template   || templates      |                |

Быстрое примечание. Я определяю вышеизложенное, не основанное на моей интерпретации, или на то, что "официальное" определение MVC... Оно основано на том, как сами другие популярные рыночные рынки.

Ответ 2

Если вы хотите, с пирамидой вы можете имитировать шаблон MVC:

  • Модель: Например, используя sqlalchemy (http://docs.sqlalchemy.org)
  • Вид: использование шаблонов и методов просмотра.
  • Контроллер: вы можете использовать пакет pyramid_handlers для создания контроллеров и действий карты, определенных в пути к действиям в контроллере, например:
   Class HomeController(object):
     def __init__(self, request):
          self.request = request

      def form_proc(self):
          name = self.request.params['name']
          ... bla, bla, bla ...

В конфигурации вы можете добавить что-то вроде:

    config.add_handler('home', '/home/{action}',
                       handler='mypackage.HomeController')

Если вы разместите этот URL-адрес в своей форме action → http://SERVER_NAME/home/form_proc, вы можете обработать форму.

Пирамида дает вам всю гибкость, если вам это нужно.

Ответ 3

Из Введение в пирамиду:

Вы говорите, что пирамида - это MVC, но Wheres The Controller?

Авторы пирамиды полагают, что шаблон MVC просто не подходит для Интернета очень хорошо. В приложении "Пирамида" есть Дерево ресурсов, которое представляет структуру сайта и представления, которые имеют тенденцию представлять данные, хранящиеся в дереве ресурсов, и определяемая пользователем "модель домена". Однако никакие средства, предоставляемые структура на самом деле обязательно сопоставляется с понятием "контроллер", или "модель". Поэтому, если вам нужно было дать ему несколько сокращений, я думаю, вы скажете Пирамида на самом деле является структурой "RV", а не "MVC". "MVC", однако, достаточно близко, поскольку общий классификатор для целей сравнения с другими веб-фреймами.

Ответ 4

У меня есть опыт работы с CakePHP, и теперь я начинаю с Pyramid и Python. Нет прямого сопоставления, но это происходит не потому, что пирамида делает вещи странным образом, а потому, что авторы фреймов злоупотребляют термином MVC.

В Cake, например, есть несколько классов, которые они любят называть "Модели", но большую часть времени это просто классы ORM. Контроллеры в основном используются в качестве пространств имен для связанных методов, называемых "действия", которые передают данные в представления, которые являются только шаблонами.

В терминах пирамиды "Ресурсы" являются "моделями", и вы можете свободно использовать там, где хотите, если вы хотите ORM, вы можете использовать SQLAlchemy, например, mongodb или где-либо еще.

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

Надеюсь, что это поможет (пожалуйста, извините мой плохой английский)