Pirámide (marco web)

Pirámide
Tipo de marco de aplicación web
Desarrollador Ben BangertJames Gardner
Escrito en Pitón
Sistema operativo plataforma cruzada
Primera edición Diciembre 2010 _
ultima versión
Licencia BSD
Sitio web pilonesproject.com

Pyramid ( en inglés  Pyramid - Pyramid  ) es un marco de software (framework) para desarrollar aplicaciones web de código abierto escritas en Python como parte del proyecto Pylons [2] .

Historia

La creación de Pyramid estuvo influenciada por frameworks como Zope , Pylons y Django . El código Pyramid se desarrolló en el proyecto repoze.bfg y el nombre cambió como resultado de la fusión de los proyectos BFG y Pylons. [3]

Principios y conceptos básicos

El diseño de la pirámide se basa en los siguientes principios [4] :

En defensa de su diseño, los autores de Pyramid escribieron un documento bastante extenso, que pretende disipar los mitos sobre el marco. Por ejemplo, la crítica del modelo MVC en Pyramid va seguida de una explicación detallada de que MVC es "inverosímil" para las aplicaciones web. La siguiente cita [5] caracteriza bien el enfoque de la terminología en Pyramid:

Creemos que solo hay dos cosas: recursos (resource) y vistas (view). El árbol de recursos representa la estructura del sitio y la vista representa el recurso. Plantillas _

en realidad, solo un detalle de implementación de alguna vista: estrictamente hablando, no son necesarios, y la vista puede devolver una respuesta (respuesta) sin ellos. No hay "controlador" (controller): simplemente no existe. Un "modelo" es un árbol de recursos o un "modelo de dominio" (como el modelo SQLAlchemy ), que no forma parte del marco en absoluto. Nos parece que nuestra terminología es más razonable dadas las limitaciones existentes de las tecnologías web.

Texto original  (inglés)[ mostrarocultar]

... [Nosotros] decimos que hay dos cosas: recursos y puntos de vista. El árbol de recursos representa una estructura de sitio, la vista presenta un recurso. Las plantillas son realmente solo un detalle de implementación de cualquier vista dada: una vista no necesita una plantilla para devolver una respuesta. No hay un "controlador": simplemente no existe. El "modelo" está representado por el árbol de recursos o por un "modelo de dominio" (como un modelo de SQLAlchemy) que está completamente separado del marco. Esto nos parece una terminología más razonable, dadas las limitaciones actuales de la web.

Características

Las principales ventajas de Pyramid son [4] :

Uso del marco para desarrollar una aplicación

Aunque no es difícil escribir una aplicación (proyecto) de Pyramid desde cero, Pyramid tiene las herramientas para inicializar el código de una nueva aplicación de acuerdo con la plantilla elegida o, en la terminología de Pyramid , andamios [ 7 ] .  Por ejemplo, la distribución incluye estructuras de marco para proyectos que utilizan ZODB o SQLAlchemy .

Un proyecto  es un directorio que contiene al menos un paquete de Python .

Estructura de directorio típica para un proyecto pequeño:

MiProyecto/ | -- CAMBIOS.txt | -- desarrollo.ini | -- MANIFIESTO.en | -- miproyecto | | -- __init__.py | | -- estática | | | -- favicon.ico | | | -- logotipo.png | | ` -- pilones.css | | -- plantillas | | ` -- miplantilla.pt | | -- pruebas.py | ` -- vistas.py | -- producción.ini | -- LÉAME.txt | -- setup.cfg ` -- setup.py

La estructura anterior, como se muestra en la documentación, no debe cambiarse mucho, ya que esto puede impedir que otros desarrolladores naveguen rápidamente por el código del proyecto [8] . Sin embargo, un proyecto en crecimiento puede requerir algunos cambios. Por ejemplo, las vistas, los modelos (si se utilizan) y las pruebas se pueden dividir en módulos y transferir a los subdirectorios de vistas, modelos y pruebas respectivamente (recordando proporcionarles un archivo __init__.py).

El proyecto podría, por ejemplo, estar en una compilación (por ejemplo, en el directorio src) que reúne todos los componentes necesarios. No es necesario que un proyecto Pyramid consista en un solo paquete. El tamaño del proyecto está limitado únicamente por el conocimiento suficiente de los desarrolladores sobre las capacidades de Pyramid [9] .

Pyramid puede funcionar con cualquier servidor WSGI . Los proyectos creados a partir de marcos preconstruidos usan el servidor Waitress.

Despacho de URL y recorrido del árbol de recursos

Cada solicitud entrante al servidor de aplicaciones Pyramid (solicitud) debe encontrar una vista (vista), que la procesará.

En Pyramid, existen dos enfoques básicos para encontrar el tipo adecuado para la solicitud que se procesa: basado en coincidencia (matching), como en la mayoría de los marcos similares, y bypass (transversal), como en Zope . Además, ambos enfoques se pueden combinar con éxito en una sola aplicación.

El ejemplo más simple con la configuración de una ruta (tomado de la documentación):

# Aquí config es una instancia de pyramid.config.Configurator config . add_route ( 'idea' , 'sitio/ {id} ' ) config . add_view ( 'mypackage.views.site_view' , route_name = 'idea' )

El uso de la derivación se ilustra mejor con un pequeño ejemplo:

desde wsgiref.simple_server importar make_server desde pyramid.config importar Configurador desde pyramid.response importar Respuesta # La clase de alguna clase de recurso Resource ( dict ) : pasar # Árbol de recursos (codificado) en la fábrica raíz def get_root ( solicitud ): devuelve Recurso ({ 'a' : Recurso ({ 'b' : Recurso ({ 'c' : Recurso ()})})}) # View-to-invoke que puede mostrar Resource resource (en contexto) def hello_world_of_resources ( context , request ): salida = "Recurso y sus hijos: %s " % context return Respuesta ( salida ) if __name__ == '__main__' : config = Configurator ( root_factory = get_root ) config . add_view ( hello_world_of_resources , context = Resource ) app = config . make_wsgi_app () servidor = make_server ( '0.0.0.0' , 8080 , aplicación ) servidor . servir_para siempre ()

En este ejemplo, la jerarquía transversal está codificada en el método get_rootmediante diccionarios anidados, mientras que las aplicaciones reales deben determinar el acceso necesario mediante claves (el método __getitem__ayuda a organizar dicho acceso). El código también contiene una fábrica raíz , desde la cual comienza realmente el recorrido de los nodos (nodo) del árbol de recursos. La vista invocable está representada por hello_world_of_resources. En pocas palabras, en función de la URL de la solicitud, Pyramid atraviesa la jerarquía y encuentra el recurso y le aplica la "mejor" vista para llamar (en nuestro ejemplo, es la única). [diez]

Configuración

La configuración de una aplicación, es decir, la especificación de parámetros que afectan su funcionamiento, se puede realizar en Pyramid de dos formas: imperativa y declarativa.

La configuración imperativa se realiza llamando a los métodos del configurador justo antes de que se inicie la aplicación.

La configuración declarativa la dan los decoradores de vistas. Antes del lanzamiento, la aplicación se "escanea" en busca de parámetros de configuración utilizando scan()el método del configurador. Ejemplo de la documentación:

from pyramid.response import Respuesta de pyramid.view import view_config @view_config ( nombre = 'hola' , request_method = 'GET' ) def hola ( solicitud ): respuesta de retorno ( 'Hola' )

Ambos métodos de configuración son completamente intercambiables. [once]

Aquellos que lo deseen pueden usar ZCML para configurar instalando el paquete apropiado.

Generación de HTML

En Pyramid, puede usar varios motores para generar HTML. Entonces, Chameleon y Mako están incluidos en la entrega. [12] Además de ellos, puedes incluir otros, como Jinja2 .

Se puede trabajar con formularios, por ejemplo, utilizando la trinidad Peppercorn-Colander-Deform.

Ejemplo

Una de las aplicaciones más simples para Pyramid [13] :

desde wsgiref.simple_server importar make_server desde pyramid.config importar Configurador desde pyramid.response importar Respuesta def hello_world ( solicitud ): return Respuesta ( '¡Hola %(nombre)s !' % solicitud . matchdict ) if __name__ == '__main__' : config = Configurator () config . add_route ( 'hola' , '/hola/ {nombre} ' ) config . add_view ( hello_world , route_name = 'hello' ) app = config . make_wsgi_app () servidor = make_server ( '0.0.0.0' , 8080 , aplicación ) servidor . servir_para siempre ()

Aplicación

Notas

  1. Versión 2.0 - 2021.
  2. Acerca del marco de la pirámide . Consultado el 8 de julio de 2012. Archivado desde el original el 23 de julio de 2012.
  3. BFG renombrado como Pyramid (enlace descendente) . Consultado el 8 de julio de 2012. Archivado desde el original el 13 de noviembre de 2010. 
  4. 1 2 Introducción a la Pirámide . Consultado el 8 de julio de 2012. Archivado desde el original el 15 de junio de 2012.
  5. Acerca de "MVC" en Pyramid . Consultado el 8 de julio de 2012. Archivado desde el original el 15 de junio de 2012.
  6. Migración a Python 3 . Consultado el 8 de julio de 2012. Archivado desde el original el 1 de octubre de 2020.
  7. similar a andamios
  8. La estructura del proyecto Pirámide . Fecha de acceso: 9 de julio de 2012. Archivado desde el original el 22 de junio de 2012.
  9. Sobre las características únicas de la Pirámide . Consultado el 9 de julio de 2012. Archivado desde el original el 12 de septiembre de 2014.
  10. Algoritmo de derivación . Consultado el 9 de julio de 2012. Archivado desde el original el 10 de junio de 2012.
  11. Acerca de la configuración . Consultado el 8 de julio de 2012. Archivado desde el original el 15 de junio de 2012.
  12. Motores de plantilla . Consultado el 9 de julio de 2012. Archivado desde el original el 15 de junio de 2012.
  13. Documentación de la pirámide. . Fecha de acceso: 8 de julio de 2012. Archivado desde el original el 29 de junio de 2012.

Enlaces

Literatura