2012-02-17 35 views
11

¿Cuáles son los equivalentes Pyramid/Python de Model - View - Controller of PHP Frameworks como Kohana?Pyramid: ¿Equivalente de MVC en PHP Frameworks en Pyramid/Python?

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 ..... 

Estoy tratando de entender la lógica de Pyramid. Como una adición a la respuesta, cualquier ayuda, documentación, etc. sería apreciada.

Gracias.

Respuesta

19

Pilones, uno de los dos marcos que se unieron para ser Pyramid (el otro era repoze.bfg) estaba "cerca" de un sistema MVC.

Puse más cerca de las citas, porque en los últimos años mucha gente ha estado peleando por lo que significa MVC ... y muchos proyectos que alguna vez se autoproclamaron como "MVC" comenzaron a llamarlos "MTC" (modelo controlador de plantilla) "MT" (plantilla de modelo) o "MV" (vista de modelo). Todos están de acuerdo con lo que es el "modelo", pero exactamente lo que la "vista" y el "controlador" asignan - en un marco dado - puede ser un punto de discusión.

Tanto las pirámides como las torres tienen una funcionalidad de "despachador" para configurar la asignación de una solicitud. En pylons está en config/routes.py; en Pyramid es un poco diferente: los andamios predeterminados tienen el enrutamiento en la aplicación/init .py, pero puede descomponerlo en la aplicación/routes.py o usar config.include() para insertarlo en usted. 'handlers' o config.scan() para sacarlo de sus 'vistas'.

'handlers' en pirámide son proporcionados por pyramid_handlers, y en realidad son solo 'vistas' con un montón de cosas de autogeneración. Si quisieras, tus aplicaciones podrían usar tanto manejadores como vistas (las mías lo hacen).

En cualquier caso, en función de cómo se interprete MVC/MTC/etc, esto es una tabla suelta de lo que es posible que desee:

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

nota- Rápida estoy definiendo lo anterior no se basa en mi interpretación o cuál es la definición 'oficial' de MVC ... Se basa en relación a cómo se comercializan otros marcos populares.

5

Desde el Pyramid Introduction:

Usted dice pirámide es MVC, pero ¿dónde está el controlador?

Los autores de Pyramid creen que el patrón MVC simplemente no encaja muy bien en la web . En una aplicación Pyramid, hay un árbol de recursos , que representa la estructura del sitio y las vistas, que tienden a presentar los datos almacenados en el árbol de recursos y un "modelo de dominio" definido por el usuario. Sin embargo, ninguna instalación provista por el marco necesariamente se corresponde con el concepto de un "controlador" o "modelo". Entonces, si tuviera que darle un acrónimo, supongo que diría Pyramid es en realidad un marco "RV" en lugar de un marco "MVC". "MVC", sin embargo, está lo suficientemente cerca como un apodo de clasificación general para fines de comparación con otros marcos web.

+0

Hola, he leído todo esto en su página web e incluso he visto ejemplos pero aún no los obtengo, por lo tanto, busquen la explicación de otro desarrollador de PHP que pueda expresarlo en términos de mi pregunta, para que pueda entender eso. Gracias. – Phil

+0

Pero los desarrolladores de Pyramid te dicen que no hay una analogía directa. ¿Por qué no confías en ellos? – Wilduck

+1

No, no, confío en ellos. La gente de Python es realmente agradable. Me encantaría comprender la lógica detrás de esto. En Kohana, por ejemplo, es simple. Defina URI, active un controlador desde el URI, diga al controlador que haga cosas, por ejemplo, use una clase modelo para hacer llamadas DB, luego incluya una plantilla o dos, mezcle las dos creadas, renderice la respuesta y envíela de regreso. Solo quiero saber cómo se hace este proceso con Pyramid. Realmente me gusta la sintaxis de Python y quiero adentrarme en ella. Gracias. – Phil

2

Tengo experiencia con CakePHP y ahora estoy empezando con Pyramid y Python. No hay un mapeo directo, pero no es porque la pirámide haga las cosas de manera extraña, sino porque los autores del marco abusaron del término MVC.

En Cake, por ejemplo, hay algunas clases a las que les gusta llamar 'Modelos' pero la mayoría de las veces son solo clases ORM. Los controladores se utilizan principalmente como espacios de nombres para métodos relacionados llamados 'acciones' que pasan los datos a las vistas, que son solo las plantillas.

En términos de pirámide, 'Recursos' son los 'modelos', y usted es libre de usar donde quiera, si desea un ORM puede usar SQLAlchemy por ejemplo o mongodb o donde sea.

El marco en sí funciona como los "controladores", y las acciones se denominan "vistas", pueden ser funciones o clases normales, puede organizarlas libremente donde lo desee. Estas vistas pueden usar una plantilla y un procesador para construir la respuesta que se envía al navegador.

creo que sirve (disculpen mi mala Inglés)

+0

Muchas gracias por esta amable respuesta.Si no te importa, me gustaría hacerte algunas preguntas más. En PHP (en general), descomprime los archivos, los coloca en una carpeta y apache + php lo ejecuta. En Python, tengo dificultades para entender cómo funciona esto. ¿Cada carpeta se considera una "aplicación"? ¿Cómo puede un servidor web alojar múltiples sitios web de Python? ¿Y cuál es el uso si WCGI? Quiero entrar en Python, pero parece complicado con respecto a WCGI y todas estas herramientas de línea de comandos. – Phil

11

Si lo desea, con la pirámide se puede simular el patrón MVC:

  • Modelo: Por ejemplo, usando sqlalchemy (http: // docs. sqlalchemy.org)
  • Vista: Uso de plantillas y métodos de visualización.
  • controlador: Se pueden utilizar los pyramid_handlers paquete, para crear controladores y el mapa de las acciones definidas en una ruta a las acciones en el controlador, por ejemplo:
 
    Class HomeController(object): 
    def __init__(self, request): 
      self.request = request 

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

En la configuración se puede añadir algo como:

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

Si coloca esta url en su formulario de acción ->http://SERVER_NAME/home/form_proc, puede procesar el formulario.

Pyramid le da toda la flexibilidad si la necesita.