Articulo de referencia

web2py

Web2py es un framework de código abierto para aplicaciones web escrito en el lenguaje de programación Python . Web2py permite a los desarrolladores web programar contenido web d...

Web2py es un framework de código abierto para aplicaciones web escrito en el lenguaje de programación Python . Web2py permite a los desarrolladores web programar contenido web dinámico utilizando Python . Web2py está diseñado para ayudar a reducir tareas tediosas de desarrollo web, como el desarrollo de formularios web desde cero, aunque un desarrollador web puede crear un formulario desde cero si es necesario. [ 2 ]

Web2py se diseñó originalmente como una herramienta didáctica, priorizando la facilidad de uso y la implementación . Por lo tanto, no incluye archivos de configuración a nivel de proyecto. Su diseño se inspiró en los frameworks Ruby on Rails y Django . Al igual que estos frameworks, web2py se centra en el desarrollo rápido , prioriza la convención sobre la configuración y sigue el patrón arquitectónico modelo-vista-controlador (MVC) .

Descripción general

Web2py es un framework full-stack, ya que cuenta con componentes integrados para todas las funciones principales, incluyendo:

Web2py fomenta buenas prácticas de ingeniería de software , tales como:

Web2py utiliza el protocolo WSGI , el protocolo orientado a Python para la comunicación entre servidores web y aplicaciones web. También proporciona manejadores para los protocolos CGI y FastCGI , e incluye el servidor web Rocket [ 6 ] wsgiserver, que admite múltiples subprocesos y SSL .

Características distintivas

Entorno de desarrollo integrado (IDE) basado en web

Todo el desarrollo , la depuración , las pruebas , el mantenimiento y la administración remota de bases de datos pueden realizarse (opcionalmente) sin herramientas de terceros, a través de una interfaz web, que a su vez es una aplicación web2py. La internacionalización (agregar idiomas y escribir traducciones) también puede realizarse desde este IDE . Cada aplicación cuenta con una interfaz de administración de bases de datos generada automáticamente, similar a la de Django . El IDE web también incluye pruebas basadas en la web.

Las aplicaciones también se pueden crear desde la línea de comandos o desarrollar con otros IDE. Opciones de depuración adicionales: [ 7 ]

  • Wing IDE permite la depuración gráfica de aplicaciones web2py [ 8 ] mientras interactúa con él desde su navegador web, puede inspeccionar y modificar variables, realizar llamadas a funciones, etc.
  • Eclipse / PyDev — Eclipse con el complemento Aptana PyDev — también admite web2py. [ 9 ] [ 10 ]
  • El depurador pdb extensible es un módulo de la biblioteca estándar de Python.
  • Con el depurador de código abierto Winpdb, independiente de la plataforma, se puede realizar la depuración remota [ 11 ] a través de TCP/IP , mediante una conexión cifrada. [ 12 ]

El programa "Hola Mundo" con web2py en su forma más simple (página web simple [ 13 ] sin plantilla) se ve así:

def hola (): return 'Hola Mundo'

Web2py incluye un lenguaje de plantillas basado en Python puro , sin requisitos de indentación y con un modelo de objetos de documento ( DOM ) del lado del servidor. El sistema de plantillas funciona sin web2py. [ 14 ] Las plantillas de Joomla 1.x se pueden convertir a diseños web2py. [ 15 ]

Web2py también incluye dos bibliotecas de marcado: el filtro markdown2 de texto a HTML, que convierte el marcado Markdown a HTML sobre la marcha ; y markmin, que está inspirado en markdown pero admite tablas, vídeo/audio html5 y el protocolo oembed.

Un controlador sin vista utiliza automáticamente una vista genérica que renderiza las variables devueltas por el controlador, lo que permite desarrollar la lógica de negocio de una aplicación antes de escribir HTML. El ejemplo "Hola Mundo" utiliza una plantilla predeterminada:

def hello (): return dict ( greeting = 'Hola Mundo' )

El resultado del diccionario (dict()) de una acción se genera automáticamente en HTML si la página se solicita con la extensión .html, en JSON si se solicita con la extensión .json y en XML si se solicita con la extensión .xml. Admite otros protocolos como jsonp, rss, ics, Google Maps, etc., y es extensible.

Aquí hay un ejemplo de código más complejo que define una tabla y expone una cuadrícula a los usuarios registrados:

db.define_table ( 'thing' , Field ( 'name ' , notnull = True ) )@ auth.requires_login ( ) def hello ( ) : return dict ( grid = SQLFORM.grid ( db.thing ) )

Sistema de emisión de billetes

Cada aplicación web2py incluye un sistema de gestión de incidencias :

  • Si se produce un error, se registra y se emite un ticket al usuario. Esto permite el seguimiento de errores.
  • Los errores y el código fuente solo son accesibles para el administrador, quien puede buscar y recuperar errores por fecha o dirección IP del cliente. Ningún error puede exponer el código a los usuarios.

cron portátil

Cron es un mecanismo para crear y ejecutar tareas recurrentes en segundo plano. Busca un archivo crontab específico de la aplicación que esté en formato crontab estándar. Hay tres modos de funcionamiento disponibles:

  • Cron suave: las rutinas cron se comprueban después de que se haya servido el contenido de la página web, pero no garantizan la precisión de la ejecución. Para instalaciones de Apache CGI/WSGI sin privilegios.
  • Cron duro: se inicia un hilo cron al arrancar web2py. Para Windows e instalaciones de web2py en Rocket/autónomos.
  • Cron del sistema: las funciones cron se ejecutan forzosamente desde la línea de comandos , normalmente desde el crontab del sistema. Para sistemas Unix/Linux y entornos donde los disparadores cron deben ejecutarse incluso si web2py no se está ejecutando en ese momento; también es útil para instalaciones CGI/WSGI si se tiene acceso al crontab del sistema.

Planificador

Desde la versión 2.3, se desaconseja el uso de cron, ya que web2py incluye un planificador maestro/trabajador. Las tareas se definen en los modelos y se programan creando una entrada en la base de datos. Los usuarios pueden iniciar procesos que ejecutan las tareas en segundo plano. La programación es superior a cron, ya que permite especificar más parámetros (hora de inicio, hora de finalización, número de repeticiones, número de intentos en caso de error) y optimiza el uso de recursos.

Distribución del código de bytes

Web2py puede compilar aplicaciones web para su distribución en formato bytecode compilado, sin necesidad de código fuente. A diferencia de los frameworks que utilizan lenguajes de plantillas especializados para sus vistas, Web2py también puede compilar el código de la vista a bytecode, ya que se trata de código Python puro.

Medio ambiente global

Web2py es único en el mundo de los frameworks web de Python porque los modelos y controladores se ejecutan, no se importan. No son módulos. Se ejecutan en un único entorno global que se inicializa con cada solicitud HTTP. Esta decisión de diseño tiene ventajas y desventajas.

La principal ventaja es la facilidad de desarrollo, especialmente para la creación rápida de prototipos. Otra ventaja es que todos los objetos definidos en este entorno se restablecen de forma limpia en cada solicitud HTTP y nunca se comparten entre solicitudes. Esto significa que el desarrollador no tiene que preocuparse por cambiar el estado de un objeto (por ejemplo, el atributo de lectura de un campo de base de datos) ni por que un cambio se propague a otras solicitudes concurrentes u otras aplicaciones. Una tercera ventaja es que web2py permite la coexistencia de múltiples aplicaciones bajo la misma instancia sin conflictos, incluso si utilizan diferentes versiones de los mismos módulos o módulos diferentes con el mismo nombre.

La principal desventaja del entorno global es que los archivos de modelo y controlador no son módulos y el orden de ejecución importa (aunque se puede especificar usando modelos condicionales). Es más probable que ocurra un conflicto de nombres que en los módulos Python normales. Algunas herramientas de desarrollo Python estándar pueden no entender los objetos definidos en modelos y controladores. Además, los desarrolladores deben tener en cuenta que el código en los modelos se ejecuta en cada solicitud y esto puede causar una penalización en el rendimiento. Nada en web2py impide que los desarrolladores usen e importen módulos Python normales (enfoque sin modelo) y para este propósito web2py proporciona un objeto local de hilo (current) para facilitar el acceso a los objetos asociados a la solicitud actual. Sin embargo, en este caso, el desarrollador debe tener en cuenta los mismos escollos que incurren otros frameworks: cambiar el estado de un objeto definido en un módulo puede afectar a otras solicitudes concurrentes.

Otra desventaja es que, debido a que los modelos y controladores no se basan en clases, la reutilización eficiente del código se vuelve más difícil, particularmente porque la imposibilidad de heredar de un controlador padre (por ejemplo, ApplicationController en Ruby on Rails) significa que la funcionalidad común del controlador debe referenciarse repetidamente en todos los archivos de controlador.

Entornos compatibles

Sistemas operativos, versiones e implementaciones de Python, máquinas virtuales, hardware

web2py funciona en Windows , teléfonos Windows CE , Mac , Unix / Linux , Google App Engine , Amazon EC2 y casi cualquier alojamiento web a través de Python 2.7/3.5/3.6/pypy. [ 2 ]

La versión binaria actual de web2py (para Windows o Mac) incluye Python 2.7, pero la versión de código fuente se puede ejecutar en Python 2.7 y 3.5 o superior. El soporte para Python 2.6 se eliminó en 2017.

web2py desde la versión 1.64.0 se ejecuta sin modificaciones en Java con Jython 2.5, sin ninguna limitación conocida. [ 16 ]

El código web2py puede ejecutarse con IronPython en .NET . [ 17 ] Limitaciones:

  • no tiene módulo csv (por lo tanto, no hay E/S de base de datos);
  • no se utilizan controladores de bases de datos de terceros (ni siquiera SQLite , por lo que no hay bases de datos de ningún tipo);
  • no tiene servidor web incorporado (a menos que lo desactives eliminando las señales y el registro ).

El binario web2py [ 18 ] se ejecutará desde una unidad USB o un disco duro portátil sin dependencias, como Portable Python.

Servidores web

Web2py puede atender solicitudes a través de HTTP y HTTPS con su servidor Rocket incorporado, [ 19 ] con Apache , [ 20 ] Lighttpd , [ 21 ] Cherokee , [ 22 ] Hiawatha , Nginx y casi cualquier otro servidor web a través de CGI , FastCGI , WSGI , mod_proxy , [ 23 ] [ 24 ] [ 25 ] y/o mod_python .

Entornos de desarrollo integrados (IDE) y depuradores

Si bien muchos desarrolladores de web2py utilizan editores de texto como Vim , Emacs o TextMate, Web2py también cuenta con un IDE web integrado. Otros prefieren herramientas más especializadas para depuración, refactorización, etc.

Manejo de bases de datos

La capa de abstracción de base de datos ( DAL ) de web2py genera consultas SQL de forma dinámica y transparente, y se ejecuta en múltiples bases de datos compatibles sin necesidad de comandos SQL específicos de la base de datos (aunque se pueden emitir comandos SQL explícitamente).

SQLite está incluido en Python y es la base de datos predeterminada de web2py. Un cambio en la cadena de conexión permite la conexión a Firebird , IBM Db2 , Informix , Ingres , Microsoft SQL Server , MySQL , Oracle , PostgreSQL y Google App Engine (GAE) con algunas salvedades. Especialidades:

  • Múltiples conexiones a la base de datos.
  • Creación y modificación automática de tablas.
  • Transacciones automáticas .
  • Transacciones distribuidas :
  • GAE no es una base de datos relacional, pero web2py emula ciertas operaciones.

El DAL es rápido, al menos comparable con SQLAlchemy y Storm . [ 30 ]

Web2py implementa una capa de acceso a datos (DAL), no un ORM . Un ORM asigna tablas de base de datos a clases que representan abstracciones lógicas de la capa de base de datos (por ejemplo, una clase User o una clase PurchaseOrder), y asigna registros a instancias de esas clases. La DAL, en cambio, asigna tablas y registros de base de datos a instancias de clases que representan conjuntos y registros en lugar de abstracciones de nivel superior. Tiene una sintaxis muy similar a la de un ORM, pero es más rápida y puede asignar casi cualquier expresión SQL a expresiones DAL. La DAL se puede usar independientemente del resto de web2py. [ 31 ]

Aquí hay algunos ejemplos de sintaxis DAL:

db = DAL ( "postgresql://user:pass@localhost/db" , pool_size = 10 ) db . define_table ( "person" , Field ( "name" ), Field ( "image" , "upload" )) db . person . insert ( name = "Martin" , image = open ( "filename.png" )) rows = db (( db . person . name == "Martin" ) | db . person . name . contains ( "T" )) . select ( orderby = db . person . name . lower () )

La última versión de la capa de acceso a datos (DAL) es compatible con funciones SIG 2D mediante Spatialite y PostGIS. Las API actuales son experimentales debido a una posible migración a API 3D.

Migraciones automáticas de bases de datos

web2py admite migraciones de bases de datos : al modificar la definición de una tabla, web2py realiza las modificaciones correspondientes. Las migraciones son automáticas, pero pueden desactivarse para cualquier tabla. Generalmente, se desactivan cuando una aplicación está lista para su distribución en producción. Las migraciones y los intentos de migración se registran, documentando así los cambios.

Limitaciones:

  • SQLite no puede modificar una tabla ni cambiar el tipo de una columna, sino que simplemente almacena los nuevos valores según el nuevo tipo.
  • GAE no tiene el concepto de tabla de modificaciones, por lo que las migraciones son limitadas.

Licencias

El código de Web2py se publica bajo la Licencia Pública General Reducida de GNU (LGPL) versión 3 a partir de la versión 1.91.1 de web2py. [ 32 ]

El código de Web2py anterior a la versión 1.91.1 se distribuyó bajo la licencia GNU GPL v2.0 con excepción comercial.

Diversos paquetes de terceros distribuidos con web2py tienen sus propias licencias, generalmente de dominio público , MIT o BSD . Las aplicaciones creadas con web2py no están cubiertas por la licencia LGPL.

Web2py está protegido por derechos de autor de Massimo DiPierro. La marca registrada web2py es propiedad de Massimo DiPierro .

Premios

En 2011, InfoWorld clasificó a web2py como el mejor entre los seis principales frameworks web de Python, otorgándole el premio Bossie 2011 al mejor software de desarrollo de aplicaciones de código abierto. En 2012, web2py ganó el premio InfoWorld a la Tecnología del Año. [ 33 ] [ 34 ]

Publicaciones

Libro web2py

La documentación base de web2py es The Official web2py Book, de Massimo DiPierro . El manual es una aplicación web2py completa y está disponible gratuitamente en línea, [ 35 ] en formato PDF o impreso.

  • 1.ª edición: agotada . Wiley ; 16 de septiembre de 2008; 256 páginas; ISBN 978-0-470-43232-7.
  • 2.ª edición: Manual de web2py. Wiley; 26 de agosto de 2009; 341 páginas; ISBN 978-0-470-59235-9.
  • 3ª edición: Lulu; 25 de septiembre de 2010; 357 páginas.
  • 4ª Edición: Lulú; 9 de diciembre de 2011 583 páginas.
  • 5.ª edición: Copia en PDF; 3 de marzo de 2013; 614 páginas; ISBN 978-0-578-12021-8.
  • Fuentes en línea más recientes: en GitHub [ 36 ]

Documentación en línea

La documentación en línea está enlazada desde la página principal de web2py e incluye un libro de recetas , vídeos, ejemplos interactivos, una referencia interactiva de la API, epydocs (referencia completa de la biblioteca), preguntas frecuentes , una hoja de trucos , herramientas en línea, etc.

  • Guía rápida para web2py.
  • web2pyslices, recetas publicadas mediante la red social movuca en web2py.
  • Curso intensivo de Web2py (serie de 5 partes).
  • Diapositivas de Web2py (antiguas).

Vídeos

  • Tutorial del framework web empresarial web2py .
  • Tutorial en vídeo de web2py "Shootout" .
  • web2py en Google App Engine .
  • web2py: Crea, edita e implementa una aplicación web básica .

Impreso

  • "Manual de desarrollo de aplicaciones web2py", Packt, 2012
  • Programación web con web2py ; Revista Python ; Marco Tabini & Associates, Inc.; junio de 2008

Fondo

Desarrolladores

El desarrollador principal de web2py es Massimo DiPierro, profesor asociado de Ciencias de la Computación en la Universidad DePaul de Chicago . En 2011, la página principal de web2py enumeraba a más de 70 "colaboradores principales". [ 37 ]

Código fuente de desarrollo

El código fuente de desarrollo de web2py está disponible en el repositorio principal:

Software de terceros incluido en web2py

Historia y denominación

El código fuente de la primera versión pública de web2py fue publicado bajo la licencia GNU GPL v2.0 el 27 de septiembre de 2007 por Massimo DiPierro como Enterprise Web Framework (EWF). El nombre se cambió dos veces debido a conflictos: a EWF v1.7 le siguió Gluon v1.0, y a Gluon v1.15 le siguió web2py v1.16. La licencia se cambió a LGPLv3 a partir de la versión 1.91.1 de web2py el 21 de diciembre de 2010.

Aplicaciones desarrolladas con Web2py

Notas

  1. "Web2PyWeb Framework" .
  2. 1 2 "¿Qué es web2py?" . web2py.com . Web2py . Consultado el 31-10-2023 .
  3. Web2py admite múltiples protocolos desde la versión 1.63.
  4. Uso de SOAP con web2py
  5. Redacción de formularios web inteligentes
  6. Servidor web Rocket
  7. ↑ ¿ Cómo depurar aplicaciones Web2py?
  8. Wing IDE admite la depuración para web2py
  9. Eclipse/PyDev admite la depuración para web2py
  10. Usando web2py en Eclipse
  11. "Con Winpdb se puede realizar depuración remota a través de TCP/IP" . Archivado del original el 9 de noviembre de 2015. Consultado el 31 de octubre de 2009 .
  12. "Comunicación cifrada en Winpdb" . Archivado del original el 9 de noviembre de 2015. Consultado el 31 de octubre de 2009 .
  13. Página web más sencilla con web2py: ejemplo de "Hola Mundo"
  14. Cómo usar plantillas web2py sin web2py
  15. Uso de plantillas de Joomla con web2py
  16. Web2py se ejecuta completamente en Java y J2EE usando Jython.
  17. Web2py se ejecuta con IronPython en .NET, con limitaciones.
  18. MySQL con binario web2py para Windows en una unidad USB
  19. Cómo ejecutar el servidor SSL integrado
  20. Web2py con Apache y mod_ssl
  21. Web2py con Lighttpd y FastCGI
  22. Web2py con Cherokee
  23. Módulo Apache mod_proxy
  24. Web2py con mod_proxy
  25. Web2py con mod_proxy y mod_proxy_html
  26. Proyecto Eric IDE
  27. Usando Wing IDE con web2py
  28. "Transacciones distribuidas con PostgreSQL" . Archivado del original el 14 de abril de 2009. Consultado el 30 de octubre de 2009 .
  29. Transacciones distribuidas con PostgreSQL: más detalles
  30. Referencia ORM
  31. Cómo usar web2py DAL sin web2py
  32. Acuerdo de licencia de web2py
  33. Grehan, Rick. "Pilares de Python: Comparación de seis frameworks web de Python" . InfoWorld . Consultado el 30 de noviembre de 2017 .
  34. personal, InfoWorld Reviews. "Ganadores del premio a la tecnología del año 2012 de InfoWorld" . InfoWorld . Consultado el 30 de noviembre de 2017 .
  35. "web2py - El manual oficial en línea" . web2py.com . Consultado el 14 de noviembre de 2018 .
  36. "web2py/web2py-book" . GitHub . Consultado el 14 de noviembre de 2018 .
  37. Lista de los principales colaboradores de web2py
  • Sitio web oficialEdita esto en Wikidata