Web2py

web2py
Tipo de framework para desarrollar aplicaciones web
Autor Massimo de Pierro
Desarrollador desarrolladores web2py
Escrito en Pitón
Primera edición 27 de septiembre de 2007 ( 2007-09-27 )
plataforma de hardware multiplataforma
ultima versión
Estado Activo
Licencia Licencia pública general reducida de GNU versión 3 (LGPLv3)
Sitio web lista de correo web2py.com

web2py  es un marco de desarrollo de aplicaciones web de código abierto escrito en el lenguaje de programación Python . Web2py permite a los desarrolladores web crear sitios web dinámicos utilizando Python. Web2py tiene como objetivo reducir las tareas de desarrollo web, como escribir formularios web desde cero, aunque un desarrollador puede diseñar un formulario desde cero si surge la necesidad. [3]

Web2py se diseñó originalmente como una herramienta de aprendizaje centrada en la usabilidad y la facilidad de implementación, ya que carece de archivos de configuración del proyecto. La arquitectura web2py fue influenciada por los frameworks Ruby on Rails (RoR) y Django . Al igual que estos marcos, web2py tiene como objetivo el desarrollo rápido , afirma la convención sobre la configuración y sigue el patrón de diseño Modelo-Vista-Controlador (MVC) .

Resumen

Web2py es un marco con todas las funciones y viene con componentes integrados para todas las funciones principales, que incluyen:

Web2py fomenta las mejores prácticas de ingeniería de software , a saber:

Web2py utiliza WSGI , un protocolo basado en Python para la comunicación entre un servidor web y aplicaciones web. También se encuentran disponibles controladores para los protocolos CGI y FastCGI , y se incluye un servidor WSGI habilitado para SSL con múltiples subprocesos , Rocket [7] .

Rasgos distintivos

Entorno de desarrollo integrado web (IDE)

Todo el proceso de desarrollo , depuración , pruebas , soporte y administración de una base de datos remota se puede realizar (si se desea) sin herramientas de terceros, a través de la interfaz web, que a su vez es una aplicación web2py. La internacionalización (añadir idiomas y traducir) también se puede hacer desde este IDE . Cada aplicación viene con una interfaz de administración de base de datos generada automáticamente, similar a Django . El IDE web también incluye herramientas de prueba y una consola web .

Las aplicaciones se pueden crear tanto desde la línea de comandos como escribir utilizando IDE de terceros. [8] Opciones de depuración adicionales disponibles: [9]

El clásico programa Hello World web2py en su forma más simple (se mostrará una página web desnuda [15] sin plantilla) se ve así:

def hola (): devuelve 'Hola Mundo'

Web2py incluye un lenguaje de plantillas basado en Python puro que no requiere el uso de sangría y un modelo de objeto de documento ( DOM ) del lado del servidor.

El motor de plantillas también se puede usar por separado de web2py. [16] Las plantillas de Joomla 1.x se pueden convertir en plantillas web2py. [17]

Web2py también incluye dos bibliotecas de marcado: el filtro markdown2 . Archivado el 19 de marzo de 2014 en Wayback Machine de texto a HTML, que convierte el marcado de Markdown a HTML sobre la marcha ; y markmin . Archivado el 19 de marzo de 2014 en Wayback Machine . Similar al anterior pero compatible con ambas tablas, video/audio html5 y protocolo oembed.

El controlador , en ausencia de una vista correspondiente, utiliza automáticamente una vista universal que muestra las variables devueltas por el controlador, lo que permite el desarrollo de la lógica comercial de la aplicación antes de escribir el diseño HTML. Un ejemplo de "Hello World" usando la plantilla predeterminada:

def hola (): return dict ( saludo = 'Hola mundo' )

El valor dict() devuelto por la acción (función) se genera automáticamente como HTML si la página se solicita con la extensión .html, como JSON si la página se solicita con la extensión .json, como XML si la página se solicita con la extensión .json. extensión .xml. Otros protocolos como jsonp, rss, ics, google maps, etc. son compatibles y se pueden ampliar.

A continuación se muestra un ejemplo más complejo de código que define una tabla y brinda a los usuarios registrados la posibilidad de editar sus campos:

base de datos define_table ( 'cosa' , Field ( 'nombre' , notnull = True )) @auth . require_login () def hola (): return dict ( grid = SQLFORM . grid ( db . cosa ))

Sistema de seguimiento de errores

Cada aplicación web2py viene con un rastreador de errores :

  • Si se produce un error, se escribe en los registros y se muestra un mensaje al usuario, lo que le permite realizar un seguimiento de los errores.
  • Los errores y el código fuente están disponibles solo para el administrador, quien puede buscarlos por fecha e IP del cliente. Ningún error puede hacer que el código se abra a los usuarios.

Cron independiente de la máquina

Cron es un mecanismo para crear y ejecutar tareas repetitivas en segundo plano. Busca el archivo crontab de la aplicación en el formato crontab estándar. Hay tres modos de funcionamiento disponibles:

  • Soft cron: las rutinas cron se verifican después de trabajar con el contenido de la página web, no garantiza una ejecución exacta. Para instalaciones sin privilegios de Apache CGI/WSGI.
  • Cron duro: se inicia un subproceso cron cuando se inicia web2py. Para Windows y Rocket/web2py independiente.
  • Cron del sistema: cron se ve obligado a ejecutarse desde la línea de comandos , normalmente desde el crontab del sistema. Para sistemas Unix/Linux y lugares donde necesita ejecutar cron triggers incluso si web2py no se está ejecutando en este momento; también es bueno para CGI/WSGI si tiene acceso al sistema crontab.

Programador de tareas

A partir de la versión 2.3, el uso de cron está en desuso porque web2py viene con un programador. Las tareas se pueden definir en modelos y programar creando una entrada en la base de datos. Los usuarios pueden iniciar procesos que realizan tareas en segundo plano. El programador es mejor que cron porque le permite configurar más parámetros (hora de inicio, hora de finalización, número de repeticiones, número de intentos de error) y funciona mejor con un uso constante de recursos.

Distribución en forma de bytecode

Web2py puede compilar aplicaciones web para su distribución en bytecode sin código fuente. A diferencia de los marcos que usan lenguajes de plantillas especializados, Web2py también puede compilar código a código de bytes, ya que es código Python puro.

Tiempo de ejecución global

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

La principal ventaja es la facilidad de desarrollo, específicamente para la creación rápida de prototipos. Otra ventaja es que todos los objetos definidos dentro de este entorno se restablecen limpiamente en cada solicitud http y nunca se comparten entre solicitudes. Esto significa que el desarrollador no necesita preocuparse por cambiar el estado de un objeto (por ejemplo, el atributo legible de un campo de base de datos) o preocuparse por la filtración de un cambio a otras solicitudes simultáneas u otras aplicaciones. Una tercera ventaja es que web2py permite la coexistencia de múltiples aplicaciones bajo la misma instancia sin conflictos, incluso si usan diferentes versiones de los mismos módulos o diferentes módulos con el mismo nombre.

La principal desventaja del entorno global es que los archivos de modelo y los archivos de controlador no son módulos y el orden de ejecución es importante (aunque se puede especificar usando modelos condicionales). Es más probable que ocurra un conflicto de nombres que en los módulos normales de Python. Es posible que algunas herramientas de desarrollo estándar de Python no entiendan los objetos definidos en modelos y controladores. Además, los desarrolladores deben ser conscientes de que el código de 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 normales de Python (enfoque sin modelo) y, para este propósito, web2py proporciona un objeto local de hilo (actual) para facilitar el acceso a los objetos asociados a la solicitud actual. Sin embargo, en este caso, el desarrollador debe ser consciente de las mismas trampas en las que incurren otros marcos: cambiar el estado de un objeto definido en un módulo puede afectar otras solicitudes concurrentes.

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

Plataformas soportadas

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

web2py se ejecuta en Windows , teléfonos con Windows CE , Mac , Unix / Linux , Google App Engine , Amazon EC2 , casi cualquier servidor web con Python 2.4 [18] /2.5/2.6/2.7.

Las versiones de lanzamiento de web2py incluyen Python 2.5, pero la versión de origen se puede ejecutar en 2.4 a 2.7.

web2py desde v1.64.0 se ejecuta sin modificaciones en Java con Jython 2.5, sin ninguna limitación conocida. [19]

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

  • sin módulo csv (por lo que no hay E/S de base de datos);
  • sin controladores de bases de datos de terceros (ni siquiera SQLite , por lo que no hay bases de datos);
  • sin servidor web incorporado (a menos que lo paralice eliminando señales y registrando ).

El binario web2py [21] se ejecutará desde una unidad USB o un disco duro portátil sin dependencias, como Portable Python . Archivado el 12 de noviembre de 2020 en Wayback Machine .

Servidores web

Web2py responde a las solicitudes realizadas a través de HTTP y HTTPS utilizando el servidor Rocket incorporado, [22] así como Apache , [23] Lighttpd , [24] Cherokee , [25] Hiawatha , Nginx y prácticamente cualquier otro servidor web que admite CGI , FastCGI , WSGI , mod proxy , [26] [27] [28] y/o mod python .

IDE y depuradores

Si bien varios desarrolladores de web2py usan editores de texto como Vim , Emacs o TextMate , Web2py también tiene un IDE integrado basado en la web. Otros prefieren herramientas más especializadas que proporcionen depuración, refactorización, etc.

Trabajar con bases de datos

La capa de abstracción de la base de datos ( DAL ) de web2py genera consultas SQL de forma transparente y dinámica y las ejecuta en una variedad de DBMS compatibles sin necesidad de comandos SQL específicos de la base de datos (al mismo tiempo, los comandos SQL también se pueden ejecutar directamente).

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 advertencias. Especialidades:

  • Múltiples conexiones de base de datos.
  • Creación y alteración automática de tablas.
  • transacciones automáticas .
  • Transacciones distribuidas :
    • Desde web2py v1.17 con PostgreSQL v8.2 y posteriores, [30] [31] porque proporciona API para confirmaciones de dos fases .
    • Desde web2py v1.70.1 con Firebird y MySQL (experimental).
  • GAE no es una tienda relacional, sino que web2py emula ciertas operaciones.

DAL promete alta velocidad, al menos en comparación con SQLAlchemy y Storm . [32]

Web2py implementa un DAL, no un ORM . Un ORM mapea las tablas de la base de datos en clases que representan abstracciones lógicas de la capa de la base de datos (p. ej., una clase de usuario o una clase de orden de compra) y mapea registros en instancias de esas clases. En cambio, DAL asigna tablas y registros de la 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 un ORM pero es más rápido y puede mapear casi cualquier expresión SQL en expresiones DAL. El DAL se puede utilizar independientemente del resto de web2py. [33]

Los siguientes son algunos ejemplos de sintaxis DAL:

db = DAL ( 'postgresql://usuario:contraseña@localhost/db' , pool_size = 10 ) db . define_table ( 'persona' , Field ( 'nombre' ), Field ( 'imagen' , 'cargar' )) db . persona _ insertar ( nombre = 'Martín' , imagen = abrir ( 'nombre de archivo.png' )) filas = db (( db . persona . nombre == 'Martin' ) | db . persona . nombre . contiene ( 'T' )) . seleccionar ( ordenar por = db . persona . nombre . inferior ())

La última versión de DAL tiene soporte para funciones GIS 2D con Spatialite y PostGIS. Las API actuales son experimentales debido a un posible cambio a API 3D.

Migración de base de datos automatizada

web2py también admite migraciones automáticas de bases de datos  : si cambia la definición de una tabla, web2py la ALTERARÁ en consecuencia. Las migraciones son automáticas, pero se pueden deshabilitar para cualquier tabla y, por lo general, la migración se deshabilita cuando una aplicación está lista para su distribución en vivo. Se registran las migraciones y los intentos de migración, documentando los cambios.

Restricciones:

  • SQLite no puede alterar la tabla y cambiar un tipo de columna, sino que simplemente almacena nuevos valores de acuerdo con el nuevo tipo.
  • GAE no tiene concepto de alter-table, por lo que las migraciones son limitadas.

Licencia

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. [34]

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

Varios paquetes de terceros distribuidos con web2py tienen sus propias licencias, generalmente licencias de tipo Public-domain , MIT o BSD . Las aplicaciones creadas con web2py no están cubiertas por la licencia LGPL.

Web2py tiene derechos de autor de Massimo DiPierro. La marca registrada "web2py framework" es propiedad de Massimo DiPierro .

Premios

En 2011, InfoWorld clasificó a web2py en la parte superior de seis marcos web de Python . En 2012, web2py ganó el premio Tecnología del Año . Archivado el 18 de abril de 2014 en Wayback Machine , por tener Web2py con todo lo que necesita para crear aplicaciones web, incluso un intérprete de Python. La misión de su creador de construir un marco fácil de usar se extiende por todas partes. La capa de abstracción de base de datos de Web2py le permite manipular una variedad de bases de datos sin tener que escribir SQL. Una vez que haya definido las tablas de su base de datos, Web2py creará automáticamente una interfaz de administración para su aplicación. De hecho, la combinación de consola y tablero de Web2py es donde se llevan a cabo todas las actividades de desarrollo de su aplicación, incluso la edición de los archivos de su aplicación. Finalmente, Web2py le permite incrustar código Python en el HTML de su página web, para que no tenga que aprender un nuevo lenguaje de plantillas. Con toda su asistencia integrada, Web2py es tan sencillo como parece .

Bibliografía

tutorial de web2py

La documentación para web2py se recopila en The Definitive Reference Guide Archivado el 12 de junio de 2018 en Wayback Machine , por Massimo DiPierro . El manual también está disponible en forma impresa o como PDF de solo lectura.

Documentación en línea

La documentación en línea , archivada el 19 de marzo de 2014 en Wayback Machine , tiene un enlace desde la página de inicio de web2py, con libros de cocina , videos, ejemplos interactivos, referencia de API interactiva, epydoc s (referencia de biblioteca completa), preguntas frecuentes , hoja de trucos , herramientas en línea, etc.

Vídeo

Materiales impresos

Información general

Soporte

El soporte de la comunidad está disponible a través de la base de conocimientos de web2py . Archivado el 19 de marzo de 2014 en Wayback Machine , la lista de correo web2py. Archivado el 25 de junio de 2012 en Wayback Machine en Google Groups y el canal #web2py en freenode . [35] A partir del 2009-10-02, quince empresas de todo el mundo proporcionan soporte comercial de web2py. [36]

Desarrolladores

El desarrollador principal de web2py es el Profesor Massimo DiPierro , Profesor Asociado de Ciencias de la Computación en la Universidad DePaul en Chicago . A partir de 2011, la página de inicio de web2py enumera más de 70 "colaboradores principales". [37]

Código fuente

El código fuente de web2py está disponible en dos repositorios:

Componentes de terceros utilizados en web2py

Historia y nombre

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 bajo el nombre Enterprise Web Framework (EWF). Debido a un conflicto de nombres, el nombre tuvo que cambiarse dos veces: EWF v1.7 fue reemplazado por Gluon v1.0, y Gluon v1.15 fue seguido por web2py v1.16. La licencia se cambió a LGPLv3 con el lanzamiento de web2py versión 1.91.1 el 2010-12-21.

Aplicaciones creadas con Web2py

  • Movuca CMS y motor de redes sociales.
  • Plataforma de Blog de Prensa Instantánea .
  • Red Social Ourway .
  • NoobMusic Portal sobre música rock.
  • Herramienta de diagnóstico de red LinkFindr .
  • StarMaker Creación de aplicaciones musicales y sociales de karaoke.

Puede encontrar una lista más larga con capturas de pantalla aquí Archivado el 14 de marzo de 2014 en Wayback Machine y aquí Archivado el 19 de marzo de 2014 en Wayback Machine . Puede encontrar una lista de complementos aquí

Notas

  1. Versión 2.21.1 - 2020.
  2. Marco Web2py - 2020.
  3. Web2py (2013), What is web2py?, web2py.com, consultado el 11 de octubre de 2013, < http://www.web2py.com/init/default/what Archivado el 17 de enero de 2020 en Wayback Machine >
  4. Web2py ha soportado muchos protocolos desde la v1.63 . Consultado el 19 de marzo de 2014. Archivado desde el original el 24 de abril de 2018.
  5. Usando SOAP con web2py . Consultado el 19 de marzo de 2014. Archivado desde el original el 24 de abril de 2018.
  6. Redacción de formularios inteligentes basados ​​en web (enlace no disponible) . Consultado el 19 de marzo de 2014. Archivado desde el original el 30 de junio de 2017. 
  7. Servidor web Rocket . Consultado el 19 de marzo de 2014. Archivado desde el original el 29 de noviembre de 2020.
  8. Web2py IDE en línea Archivado el 8 de septiembre de 2012 en Wayback Machine con It's All Text!  (enlace no disponible) Complemento de Firefox y Ulipad Archivado el 12 de marzo de 2014 en Wayback Machine (IDE de Python de código abierto)
  9. ¿Cómo depurar aplicaciones Web2py? . Fecha de acceso: 19 de marzo de 2014. Archivado desde el original el 19 de marzo de 2014.
  10. Wing IDE admite la depuración para web2py . Fecha de acceso: 19 de marzo de 2014. Archivado desde el original el 12 de febrero de 2014.
  11. Eclipse/PyDev admite la depuración para web2py . Consultado el 19 de marzo de 2014. Archivado desde el original el 13 de febrero de 2010.
  12. Uso de web2py en Eclipse . Consultado el 19 de marzo de 2014. Archivado desde el original el 19 de diciembre de 2010.
  13. Con Winpdb se puede hacer una depuración remota sobre TCP/IP (enlace descendente) . Consultado el 19 de marzo de 2014. Archivado desde el original el 9 de noviembre de 2015. 
  14. Comunicación cifrada en Winpdb (enlace descendente) . Consultado el 19 de marzo de 2014. Archivado desde el original el 9 de noviembre de 2015. 
  15. Página web más simple con web2py: ejemplo "Hello World" . Consultado el 19 de marzo de 2014. Archivado desde el original el 29 de mayo de 2019.
  16. Cómo usar las plantillas de web2py sin web2py . Consultado el 19 de marzo de 2014. Archivado desde el original el 14 de febrero de 2012.
  17. Uso de plantillas de Joomla con web2py . Consultado el 19 de marzo de 2014. Archivado desde el original el 24 de abril de 2018.
  18. Cómo ejecutar web2py con Python 2.4 . Consultado el 19 de marzo de 2014. Archivado desde el original el 31 de octubre de 2013.
  19. Web2py se ejecuta completamente en Java y J2EE usando Jython . Consultado el 19 de marzo de 2014. Archivado desde el original el 9 de noviembre de 2012.
  20. Web2py se ejecuta con IronPython en .NET, con limitaciones . Consultado el 19 de marzo de 2014. Archivado desde el original el 25 de abril de 2014.
  21. MySQL con web2py Windows binary en una memoria USB . Consultado el 19 de marzo de 2014. Archivado desde el original el 26 de mayo de 2012.
  22. Cómo ejecutar el servidor SSL incorporado . Consultado el 19 de marzo de 2014. Archivado desde el original el 15 de abril de 2015.
  23. Web2py con Apache y mod_ssl . Fecha de acceso: 19 de marzo de 2014. Archivado desde el original el 7 de junio de 2012.
  24. Web2py con Lighttpd y FastCGI . Consultado el 19 de marzo de 2014. Archivado desde el original el 25 de abril de 2014.
  25. Web2py con Cherokee . Consultado el 19 de marzo de 2014. Archivado desde el original el 2 de diciembre de 2013.
  26. Módulo Apache mod_proxy . Consultado el 19 de marzo de 2014. Archivado desde el original el 10 de febrero de 2011.
  27. Web2py con mod_proxy . Consultado el 19 de marzo de 2014. Archivado desde el original el 31 de octubre de 2013.
  28. Web2py con mod_proxy y mod_proxy_html . Consultado el 19 de marzo de 2014. Archivado desde el original el 18 de marzo de 2014.
  29. Usando Wing IDE con web2py . Fecha de acceso: 19 de marzo de 2014. Archivado desde el original el 12 de febrero de 2014.
  30. Transacciones distribuidas con PostgreSQL Archivado el 14 de abril de 2009.
  31. Transacciones distribuidas con PostgreSQL: más detalles
  32. Evaluación comparativa de ORM . Consultado el 19 de marzo de 2014. Archivado desde el original el 31 de octubre de 2013.
  33. Cómo usar web2py DAL sin web2py . Fecha de acceso: 19 de marzo de 2014. Archivado desde el original el 1 de noviembre de 2013.
  34. Acuerdo de licencia de web2py . Consultado el 19 de marzo de 2014. Archivado desde el original el 25 de abril de 2014.
  35. Canal IRC #web2py Archivado el 27 de octubre de 2009.
  36. Soporte comercial para web2py . Fecha de acceso: 19 de marzo de 2014. Archivado desde el original el 19 de marzo de 2014.
  37. Lista de los principales colaboradores de web2py . Fecha de acceso: 19 de marzo de 2014. Archivado desde el original el 19 de marzo de 2014.

Enlaces