Frage

Was sind die Pyramid / Python-Äquivalente von Model - View - Controller von PHP-Frameworks wie 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 .....

Ich versuche Pyramids Logik zu verstehen.Als Ergänzung zur Antwort wäre jede Hilfe, Dokumentation usw. willkommen.

Danke.

War es hilfreich?

Lösung

Pylone, eines der beiden Frameworks, die sich zu Pyramid zusammengeschlossen haben (das andere war repoze.bfg), war einem MVC-System "nahe".

Ich habe Zitate knapp gemacht, weil in den letzten Jahren viele Leute darüber gestritten haben, was MVC bedeutet ... und viele Projekte, die sich einst als "MVC" bewarben, sie "MTC" (Modellvorlage) nannten Controller) "MT" (Modellvorlage) oder "MV" (Modellansicht). Alle sind sich einig, was das "Modell" ist, aber genau das, worauf die "Ansicht" und "Controller" in einem bestimmten Rahmen abgebildet sind, kann ein Streitpunkt sein.

Pyramide und Pylone verfügen beide über eine "Dispatcher" -Funktion, um die Zuordnung für eine Anforderung einzurichten. Unter Pylonen ist es in config / route.py; Unter Pyramid ist es etwas anders - die Standardgerüste haben das Routing in app / init .py, aber Sie können es in app / route.py aufteilen oder config.include () verwenden. um es in Ihre 'Handler' oder config.scan () zu schieben, um es aus Ihren 'Ansichten' zu ziehen.

'Handler' in der Pyramide werden von pyramid_handlers bereitgestellt und sind eigentlich nur 'Ansichten' mit einer Reihe von Dingen zur automatischen Generierung. Wenn Sie möchten, können Ihre Apps sowohl Handler als auch Ansichten verwenden (meine tun dies).

Abhängig davon, wie Sie MVC / MTC / etc interpretieren, ist dies auf jeden Fall eine lose Tabelle mit den gewünschten Informationen:

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

Kurzer Hinweis - Ich definiere das Obige nicht basierend auf meiner Interpretation oder der 'offiziellen' MVC-Definition ... Es basiert auf der Art und Weise, wie andere beliebte Frameworks sich selbst vermarkten.

Andere Tipps

Wenn Sie möchten, können Sie mit pyramid das MVC-Muster simulieren:

  • Modell: Zum Beispiel mit sqlalchemy (http://docs.sqlalchemy.org)
  • Ansicht: Verwenden von Vorlagen und Ansichtsmethoden.
  • Controller: Mit dem Paket pyramid_handlers können Sie Controller erstellen und Aktionen, die in einer Route definiert sind, Aktionen im Controller zuordnen, z. B.:
       Class HomeController(object):
         def __init__(self, request):
              self.request = request
    
          def form_proc(self):
              name = self.request.params['name']
              ... bla, bla, bla ...
    

    In der Konfiguration können Sie Folgendes hinzufügen:

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

    Wenn Sie diese URL in Ihre Formularaktion einfügen -> http:// SERVER_NAME / home / form_proc , können Sie das Formular verarbeiten.

    Pyramide bietet Ihnen die Flexibilität, wenn Sie sie brauchen.

Aus der Pyramideneinführung :

Sie sagen, Pyramide ist MVC, aber wo ist der Controller?

Die Pyramid-Autoren glauben, dass das MVC-Muster einfach nicht wirklich ins Web passt sehr gut.In einer Pyramidenanwendung gibt es eine Ressourcenbaum, der die Site-Struktur darstellt, und Ansichten, die neigen dazu, die im Ressourcenbaum gespeicherten Daten darzustellen und a benutzerdefiniertes "Domain-Modell".Es wurde jedoch keine Einrichtung von der Das Framework entspricht eigentlich notwendigerweise dem Konzept eines „Controllers“. oder "Modell".Wenn Sie ihm also ein Akronym geben müssten, würden Sie es wohl sagen Pyramid ist eigentlich eher ein "RV" -Framework als ein "MVC" -Framework. "MVC" ist jedoch als allgemeiner Klassifikationsname nah genug zu Vergleichszwecken mit anderen Webframeworks.

Ich habe Erfahrung mit CakePHP und beginne jetzt mit Pyramid und Python. Es gibt keine direkte Zuordnung, aber nicht, weil die Pyramide die Dinge auf seltsame Weise tut, sondern weil Framework-Autoren den MVC-Begriff missbraucht haben.

In Cake gibt es zum Beispiel einige Klassen, die sie gerne als "Modelle" bezeichnen, aber meistens sind es nur ORM-Klassen. Die Controller werden meistens als Namespaces für verwandte Methoden verwendet, die als "Aktionen" bezeichnet werden und die Daten an die Ansichten übergeben, die nur die Vorlagen sind.

In pyramidenförmigen Begriffen sind 'Ressourcen' die 'Modelle', und Sie können sie hier verwenden, wo immer Sie möchten. Wenn Sie ein ORM möchten, können Sie beispielsweise SQLAlchemy oder mongodb oder wo auch immer verwenden.

Das Framework selbst fungiert als "Controller", und die Aktionen werden als "Ansichten" bezeichnet. Dies können normale Funktionen oder Klassen sein. Sie können sie frei organisieren, wo immer Sie möchten. Diese Ansichten verwenden möglicherweise eine Vorlage und einen Renderer, um die Antwort zu erstellen, die an den Browser gesendet wird.

Hoffe es hilft (bitte entschuldigen Sie mein schlechtes Englisch)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top