Web2py es un marco de aplicación web de código abierto 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 las tediosas tareas 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]
Autor (es) original (es) | Massimo Di Pierro |
---|---|
Versión inicial | 27 de septiembre de 2007 |
Lanzamiento estable | 2.19.1 [1] / 21 de marzo de 2020 |
Repositorio | Repositorio Web2py |
Escrito en | Pitón |
Plataforma | Multiplataforma |
Tipo | Marco de aplicación web |
Licencia | Licencia pública general reducida GNU versión 3 (LGPLv3) |
Sitio web | www.web2py.com |
Web2py fue diseñado originalmente como una herramienta de enseñanza con énfasis en la facilidad de uso e implementación . Por lo tanto, no tiene archivos de configuración a nivel de proyecto. El diseño de web2py se inspiró en los frameworks Ruby on Rails y Django . Al igual que estos marcos, web2py se centra en el desarrollo rápido , favorece la convención sobre el enfoque de configuración y sigue un patrón arquitectónico modelo-vista-controlador (MVC) .
Descripción general
Web2py es un marco de trabajo completo en el sentido de que tiene componentes integrados para todas las funciones principales, que incluyen:
- Solicitudes HTTP , respuestas HTTP, cookies , sesiones ;
- múltiples protocolos [3] HTML / XML , REST , ATOM y RSS , RTF y CSV , JSON , JSON-RPC y XML-RPC , AMF-RPC ( Flash / Flex ) y SOAP ; [4]
- API CRUD ;
- múltiples mecanismos de autenticación y control de acceso basado en roles ;
- capa de abstracción de base de datos (DAL) que genera SQL dinámicamente y se ejecuta en múltiples backends de base de datos compatibles;
- Almacenamiento en caché basado en RAM , disco y memcached para mayor escalabilidad ;
- apoyo a la internacionalización ;
- jQuery para efectos Ajax y UI ;
- registro automático de errores con contexto.
Web2py fomenta prácticas sólidas de ingeniería de software como
- el patrón modelo-vista-controlador (MVC);
- autoenvío [5] de formularios web ;
- sesiones del lado del servidor ;
- manejo seguro de archivos cargados.
Web2py utiliza el protocolo WSGI , el protocolo orientado a Python para la comunicación entre el servidor web y las aplicaciones web. También proporciona manejadores para CGI y los FastCGI protocolos, y que incluye el multi-hilo , SSL Rocket habilitado [6] wsgiserver.
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 la base de datos se pueden realizar (opcionalmente) sin herramientas de terceros, a través de una interfaz web, en sí misma una aplicación web2py. La internacionalización (agregar idiomas y escribir traducciones) también se puede realizar desde este IDE . Cada aplicación tiene una interfaz administrativa de base de datos generada automáticamente, similar a Django . El IDE web también incluye pruebas basadas en web.
Las aplicaciones también pueden crearse desde la línea de comandos o desarrollarse con otros IDE. [7] Más opciones de depuración: [8]
- Wing IDE permite la depuración gráfica de aplicaciones web2py [9] a medida que 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 es compatible con web2py. [10] [11]
- El depurador pdb extensible es un módulo de la biblioteca estándar de Python.
- Con el depurador Winpdb de código abierto independiente de la plataforma, se puede realizar una depuración remota [12] sobre TCP / IP , a través de una conexión cifrada. [13]
El programa Hello World con web2py en su forma más simple (página web simple [14] sin plantilla) se ve así:
def hola (): devuelve 'Hola mundo'
Web2py incluye un lenguaje de plantilla puro basado en Python , sin requisitos de sangría y un modelo de objetos de documento ( DOM ) del lado del servidor . El sistema de plantillas funciona sin web2py. [15] Las plantillas de Joomla 1.x se pueden convertir en diseños web2py. [dieciséis]
Web2py también incluye dos bibliotecas de marcado: el filtro de texto a HTML markdown2, que convierte el marcado Markdown a HTML sobre la marcha ; y markmin, que está inspirado en markdown pero admite tablas, video / audio html5 y protocolo oembed.
Un controlador sin una vista utiliza automáticamente una vista genérica que representa las variables devueltas por el controlador, lo que permite el desarrollo de la lógica empresarial de una aplicación antes de escribir HTML. El ejemplo de "Hello World" con una plantilla predeterminada:
def hola (): return dict ( saludo = 'Hola mundo' )
La salida dict () de una acción se representa automáticamente en HTML si la página se solicita con una extensión .html, en JSON si la página se solicita con una extensión .json, en XML si se solicita con .xml. Es compatible con otros protocolos, incluidos 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 ( 'cosa' , Campo ( 'nombre' , notnull = True ))@auth . require_login () def hola (): return dict ( cuadrícula = SQLFORM . cuadrícula ( db . cosa ))
Sistema de venta de entradas
Cada aplicación web2py viene con un sistema de tickets :
- Si ocurre un error, se registra y se emite un ticket al usuario. Eso permite el seguimiento de errores.
- Los errores y el código fuente son accesibles solo para el administrador, que puede buscar y recuperar errores por fecha o IP de cliente. Ningún error puede provocar que el código se exponga 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:
- Soft cron: las rutinas cron se comprueban después de que se ha servido el contenido de la página web, no garantiza la precisión de ejecución. Para instalaciones sin privilegios de Apache CGI / WSGI.
- Cron duro: un hilo cron se inicia en el inicio de web2py. Para instalaciones de Windows y Rocket / web2py independiente.
- Cron del sistema: las funciones cron se llaman forzosamente desde la línea de comandos , generalmente desde el crontab del sistema. Para sistemas Unix / Linux y lugares donde los disparadores cron deben ejecutarse incluso si web2py no se está ejecutando en este momento; también es bueno para instalaciones CGI / WSGI si tiene acceso al crontab del sistema.
Programador
Desde la versión 2.3, se desaconseja el uso de cron ya que web2py viene con un programador maestro / trabajador. Los trabajos se pueden definir en modelos y se programan creando una entrada en la base de datos. Los usuarios pueden iniciar procesos de trabajo que recogen y ejecutan tareas en segundo plano. El cronograma es mejor que cron porque 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 hacer un mejor trabajo de ejecución dentro de la utilización constante de recursos.
Distribución de código de bytes
Web2py puede compilar aplicaciones web para su distribución en forma de código de bytes compilado, sin código fuente. A diferencia de los marcos que utilizan lenguajes de plantilla especializados para sus vistas, Web2py también puede compilar el código de la vista en código de bytes, ya que es código Python puro.
Medio Ambiente Global
Web2py es único en el mundo de los frameworks web 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 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 la base de datos) o preocuparse por la filtración de un cambio 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 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 mediante 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 comprendan 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 del rendimiento. Nada en web2py impide que los desarrolladores utilicen e importen módulos Python normales (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 los mismos errores en los que incurren otros marcos: cambiar el estado de un objeto definido en un módulo puede afectar a otras solicitudes simultáneas.
Otra desventaja es que, debido a que los modelos y 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, el ApplicationController en Ruby on Rails) significa que la funcionalidad del controlador común debe ser referenciada repetidamente en todos los archivos del controlador.
Entornos compatibles
Sistemas operativos, versiones e implementaciones de Python, máquinas virtuales, hardware
web2py se ejecuta 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. [17]
La versión binaria actual de web2py (para Windows o Mac) incluye Python 2.7, pero la versión de origen se puede ejecutar en 2.7 y 3.5+. El soporte para Python 2.6 se eliminó en 2017.
web2py desde v1.64.0 se ejecuta sin modificaciones en Java con Jython 2.5, sin ninguna limitación conocida. [18]
El código web2py se puede ejecutar con IronPython en .NET . [19] 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 inutilice eliminando señales y registrando ).
El binario de web2py [20] 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 integrado, [21] con Apache , [22] Lighttpd , [23] Cherokee , [24] Hiawatha , Nginx y casi cualquier otro servidor web a través de CGI , FastCGI , WSGI , mod_proxy , [25] [26] [27] 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 web. Otros prefieren herramientas más especializadas que proporcionen depuración, refactorización, etc.
- Aptana Studio con PyDev integrado
- Eclipse con PyDev
- Eric con depurador incorporado. [28]
- IDE de ala [29]
- Microsoft Visual Studio con Python Tools para Visual Studio
- Pycharm 3 tiene soporte para el marco Web2py
Manejo de bases de datos
La capa de abstracción de la 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 la necesidad de comandos SQL específicos de la base de datos (aunque los comandos SQL se pueden emitir explícitamente).
SQLite está incluido en Python y es la base de datos web2py predeterminada. Un cambio de 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:
- Varias conexiones a bases de datos.
- La tabla automática crea y altera.
- 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, pero web2py emula ciertas operaciones.
El DAL es rápido, al menos comparable 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 (por ejemplo, una clase de usuario o una clase PurchaseOrder) y mapea registros en instancias de esas clases. En cambio, la DAL asigna tablas y registros de la base de datos en 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]
A continuación, se muestran algunos ejemplos de sintaxis DAL:
db = DAL ( 'postgresql: // usuario: pass @ localhost / db' , pool_size = 10 ) db . define_table ( 'persona' , Campo ( 'nombre' ), Campo ( 'imagen' , 'subir' )) db . persona . insert ( name = 'Martin' , image = open ( 'filename.png' )) rows = db (( db . person . name == 'Martin' ) | db . person . name . contains ( 'T' )) . seleccione ( orderby = db . person . name . lower ())
La última versión de DAL admite funciones GIS 2D con Spatialite y PostGIS. La API actual es experimental debido a un posible cambio a las API 3D.
Migraciones automáticas de bases de datos
web2py admite migraciones de bases de datos: cambie la definición de una tabla y web2py ALTERA la tabla 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. Las migraciones y los intentos de migración se registran, documentando los cambios.
Limitaciones:
- 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 el concepto de alter-table, por lo que las migraciones son limitadas.
Licencias
El código de Web2py se publica bajo GNU Lesser General Public License (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 dominio público , tipo MIT o BSD . Las aplicaciones creadas con web2py no están cubiertas por la licencia LGPL.
Web2py tiene los derechos de autor de Massimo DiPierro. La marca web2py es propiedad de Massimo DiPierro .
Premios
En 2011, InfoWorld clasificó a web2py en la posición más alta entre los seis mejores marcos web de Python, y le otorgó a web2py el premio Bossie 2011 al mejor software de desarrollo de aplicaciones de código abierto. En 2012, web2py ganó el premio InfoWorld Technology of the Year. [35] [36]
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, [37] en formato PDF o en forma impresa.
- 1ª edición: agotado . Wiley ; 16 de septiembre de 2008; 256 páginas; ISBN 978-0-470-43232-7 .
- 2da 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: Lulu; 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 .
- últimas fuentes en línea: en GitHub [38]
Documentación en línea
La documentación en línea está vinculada desde la página de inicio de web2py, con libro 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.
- Hoja de trucos para web2py.
- web2pyslices, recetas publicadas a través de la red social movuca en web2py.
- Curso intensivo en Web2py (serie de 5 partes).
- Diapositivas de Web2py (antiguo).
Videos
- Tutorial de web2py Enterprise Web Framework .
- Video tutorial de web2py "Shootout" .
- web2py en Google appengine .
- web2py: cree, edite e implemente una aplicación web básica .
Impreso
- "Libro de recetas 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 en Chicago . A partir de 2011, la página de inicio de web2py enumera más de 70 "contribuyentes principales". [39]
Código fuente de desarrollo
El código fuente de desarrollo de web2py está disponible en el repositorio principal:
- Git en GitHub : Web2Py
Software de terceros incluido en web2py
- Componentes basados en Python :
- Cohete, una forma rápida, HTTP / 1.1 según norma, multi-hilo , SSL habilitado para y el streaming -capaz WSGI servidor;
- fcgi.py: una puerta de enlace FastCGI / WSGI ;
- API de inicio de sesión para Janrain, Dropbox, Google, LDAP, PAM, X509, CAS, OpenID, OAuth 1 y 2, Loginza
- simplejson: un codificador y decodificador JSON simple, rápido, completo, correcto y extensible ;
- markdown2: un procesador de Markdown ;
- fpdf una biblioteca para la generación de PDF;
- PyRTF: un generador de documentos RTF ;
- un resaltador de sintaxis ;
- pysimplesoap para servicios SOAP;
- PyRSS2Gen: un generador de RSS ;
- feedparser: para analizar los feeds RSS y Atom .
- Componentes basados en JavaScript :
- jQuery : una biblioteca JavaScript ligera ;
- CodeMirror : un editor gratuito de código fuente;
- Componentes basados en C :
- SQLite : una base de datos relacional ;
- memcached : un sistema de almacenamiento en caché de memoria distribuida de uso general.
- API de pago para Authorize.Net, Google Wallet, Stripe.com
Historia y naming
El código fuente de la primera versión pública de web2py fue lanzado bajo GNU GPL v2.0 el 2007-09-27 por Massimo DiPierro como Enterprise Web Framework (EWF). El nombre se cambió dos veces debido a conflictos de nombres: EWF v1.7 fue seguido por Gluon v1.0, y Gluon v1.15 fue seguido por web2py v1.16. La licencia se cambió a LGPLv3 a partir de la versión 1.91.1 de web2py el 21-12-2010.
Aplicaciones creadas en Web2py
- Movuca CMS y motor de redes sociales.
- Plataforma de Blog de Prensa Instantánea .
- Ourway Sitio de redes sociales.
- NoobMusic Un sitio web de música rock.
- Herramienta de diagnóstico de red LinkFindr .
- StarMaker Desarrolla aplicaciones de música social de estilo karaoke.
Notas
- ^ "Versión 2.19.1" . 21 de marzo de 2020 . Consultado el 22 de marzo de 2020 .
- ^ Web2py (2013), What is web2py ?, web2py.com, consultado el 11 de octubre de 2013, < http://www.web2py.com/init/default/what >
- ^ Web2py habla varios protocolos desde v1.63
- ^ Usando SOAP con web2py
- ^ Redacción de formularios inteligentes basados en la web
- ^ Servidor web Rocket
- ^ ¡ IDE en línea de Web2py con It's All Text! Complemento de Firefox y Ulipad (IDE de Python de código abierto)
- ^ ¿Cómo depurar aplicaciones Web2py?
- ^ Wing IDE admite la depuración de web2py
- ^ Eclipse / PyDev admite la depuración para web2py
- ^ Usando web2py en Eclipse
- ^ Con Winpdb se puede realizar una depuración remota a través de TCP / IP
- ^ Comunicación cifrada en Winpdb
- ^ Página web más sencilla con web2py: ejemplo "Hello World"
- ^ Cómo utilizar plantillas web2py sin web2py
- ^ Uso de plantillas Joomla con web2py
- ^ http://web2py.com/init/default/what
- ^ Web2py se ejecuta completamente en Java y J2EE usando Jython
- ^ Web2py se ejecuta con IronPython en .NET, con limitaciones
- ^ MySQL con binario de Windows web2py en una memoria USB
- ^ Cómo ejecutar el servidor SSL integrado
- ^ Web2py con Apache y mod_ssl
- ^ Web2py con Lighttpd y FastCGI
- ^ Web2py con Cherokee
- ^ Módulo Apache mod_proxy
- ^ Web2py con mod_proxy
- ^ Web2py con mod_proxy y mod_proxy_html
- ^ Proyecto Eric IDE
- ^ Usando Wing IDE con web2py
- ^ Transacciones distribuidas con PostgreSQL
- ^ Transacciones distribuidas con PostgreSQL - más detalles
- ^ Punto de referencia de ORM
- ^ Cómo utilizar web2py DAL sin web2py
- ^ Acuerdo de licencia de web2py
- ^ Grehan, Rick. "Pilares de Python: Seis marcos web de Python comparados" . InfoWorld . Consultado el 30 de noviembre de 2017 .
- ^ personal, Reseñas de InfoWorld. "Ganadores del premio a la tecnología del año 2012 de InfoWorld" . InfoWorld . Consultado el 30 de noviembre de 2017 .
- ^ "web2py - El manual oficial en línea" . web2py.com . Consultado el 14 de noviembre de 2018 .
- ^ "web2py / web2py-book" . GitHub . Consultado el 14 de noviembre de 2018 .
- ^ Lista de contribuyentes principales a web2py
enlaces externos
- Página web oficial