Web2py
# Web2py

Web2py es un framework de desarrollo web que es software libre y de código abierto. Su objetivo principal es dar soporte al desarrollo ágil de software de aplicaciones web escalables, seguras y portables enfocadas en bases de datos. Web2py está escrito y programado en lenguaje Python. Dado que web2py fue originalmente diseñado como una herramienta de enseñanza con énfasis en la facilidad de uso y despliegue, no tiene ningún archivo de configuración a nivel de proyecto.

Web2py fue inspirado por Ruby on Rails (RoR), y como RoR se enfoca en desarrollo rápido, favoreciendo el enfoque convención sobre configuración y siguiendo el patrón Modelo Vista Controlador (MVC). A su vez, web2py está basado en Python y provee una interfaz administrativa exhaustiva, incluye bibliotecas para manejar protocolos, y puede funcionar sobre Google App Engine.

Web2py también fue inspirado por Django y, al igual que Django, tiene la habilidad de generar formularios desde tablas de la base de datos e incluye un conjunto extensivo de validadores.

Gracias a Python, web2py es menos verboso que los frameworks basados en Java, y su sintaxis tiende a ser más limpia que la de los frameworks basados en PHP. Esto hace que las aplicaciones sean más simples de desarrollar, leer y mantener.

## Visión general y características

Web2py es un framework completo ya que tiene componentes incorporados para todas las funciones principales, incluyendo:

* Pedidos y respuestas HTTP, cookies, sesiones;
* Múltiples protocolos HTML/XML, REST, ATOM y RSS, RTF y CSV, JSON, JSON-RPC y XML-RPC, AMF-RPC (Flash/Flex), y SOAP;
* API para CRUD (altas, bajas y modificaciones) ;
* Mecanismos múltiples de autenticación y control de accesos basados en roles;
* Capa de abstracción de base de datos (DAL) que genera dinámicamente SQL y lo ejecuta en múltiples servidores compatibles;
* Caché para escalabilidad basadas en RAM, disco, y memcached;
* Soporte para internacionalización;
* jQuery para programación en Ajax y efectos para la interfaz de usuario;
* Ticket: registro automático de errores con contexto.

Web2py alienta prácticas reconocidas de la ingeniería de software como

* El patrón Modelo Vista Controlador (MVC);
* auto-envío de formularios web;
* sesiones en el servidor;
* manejo seguro de archivos subidos.

Originalmente diseñado como una herramienta de enseñanza en la universidad DePaul, web2py tiene una curva de aprendizaje muy llana. Requiere poca o ninguna instalación o configuración, y provee un entorno de desarrollo completamente basado en web.

Web2py usa la interfaz WSGI, el protocolo orientado a Python para comunicaciones entre el servidor web y las aplicaciones. También provee manejadores para protocolos CGI y FastCGI, e incluye un servidor CherryPy wsgiserver multihilo y capaz de SSL.

Web2py tiene liberaciones frecuentes y es fácil de actualizar. A pesar de frecuentes lanzamientos, los desarrolladores de web2py no han roto la compatibilidad hacia atrás desde la versión v1.0 en 2007, y se han comprometido a no romper en el futuro.

## Características distintivas

### Entorno de desarrollo integrado (IDE) basado en web

Todo el desarrollo puede ser realizado (opcionalmente) vía una interfaz web, sin herramientas de terceros, dentro de la misma aplicación web2py. Cada aplicación tiene una interfaz de base de datos integrada, similar a la de Django. La IDE web también incluye un editor de código, editor html para las vistas, herramienta de pruebas y una consola basada en web.

Las aplicaciones también pueden ser creadas desde la línea de comandos o desarrolladas con otras IDEs.

### Vistas Flexibles

El programa Hola Mundo con web2py en su forma más simple (página web simple sin plantilla) se ve:

Web2py incluye un lenguaje de plantilla rápido, basado en Python puro, sin requerimientos de Indentacion y un modelo de objeto de documento (DOM). El lenguaje de plantillas funciona sin web2py. Las plantillas Joomla 1.x pueden ser convertidas a web2py.

Un controlador sin una vista automáticamente usa una vista genérica para mostrar las variables devueltas por el controlador, permitiendo desarrollar la lógica del negocio antes de escribir el HTML. El ejemplo "Hola Mundo" usando la plantilla predeterminada:

### Seguridad de alto nivel

Web2py tiene un foco en la seguridad prestando mecanismos predeterminados seguros, previniendo las vulnerabilidades más comunes; nunca ha tenido reportes de incidentes de seguridad.

### Sistema de Tickets

Cada aplicación web2py viene con un Sistema de seguimiento de incidentes:

* Si ocurre un error, es registrado y un ticket es generado para el usuario. Esto permite seguimiento de errores.
* Los errores y el código fuente son solo accesibles por el administrador, quien puede buscar y recuperar los errores por fecha o IP del cliente. El código nunca se expone al usuario.

### Planificador de tareas Portable

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

* Soft cron: cron las rutinas son revisadas después de servir el contenido web, no garantiza precisión en su ejecución. (para Apache CGI/WSGI)
* Hard cron: un hilo cron se inicia al comenzar web2py. (para Windows y CherryPy).
* System cron: las funciones cron son llamadas desde el sistema operativo (Unix/Linux)

### Protección del código fuente

Web2py puede compilar las aplicaciones web y estas pueden ser distribuidas en forma de bytecode, sin el código fuente. Esto ayuda pero no garantiza la protección del código fuente debido a la existencia de desensambladores y decompilador para Python con efectividad variada (archivos *.pyc y *.pyo)

### Capa de abstracción de base de datos (DAL)

Web2py implementa una DAL, no un ORM. Un ORM mapea las tablas de una base de datos en clases y los registros en instancias de estas clases. La DAL en cambio mapea, de manera transparente, las tablas en instancias de una clase (Table) y los registros en instancias (DAL Set, DAL Rows, DAL Fields). Tiene una sintaxis muy similar a un ORM pero es más rápido, y puede manejar casi cualquier expresión SQL. La DAL puede ser usada sin web2py.

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

* Conexiones a múltiples bases de datos.
* Creación y alteración automática de tablas.
* Manejo automático de transacciones.
* Transacciones distribuidas (desde web2py v1.17 con PostgreSQL, desde web2py v1.70.1 para Firebird y MySQL (experimental).
* GAE no es un almacenamiento relacional, pero web2py emula ciertas operaciones.

### Migraciones automáticas de esquema

Web2py soporta migración automática al cambiar la definición de una tabla, web2py la ALTERa (puede ser deshabilitado). Las migraciones, sus intentos y los cambios son registrados (logged) y documentados.

Limitaciones:

* SQLite no entiende bien las migraciones. En particular no puede alterar el tipo de datos de una columna, simplemente almacena los nuevos valores en el nuevo tipo.
* GAE no tiene el concepto de alterar una tabla, por lo que es limitado.

## Aplicaciones

Puede encontrar muchas aplicaciones libres y gratuitas listas para usar con el código fuente completo, listas para personalizar, con varias licencias.

La mayoría en la lista de accesorios de su página principal:

* Planilla de Cálculo Ajax: una Planilla de Cálculo embebible.
* Chat: Chat web Ajax que soporta múltiples salas y usuarios.
* Libro de Cocina: un accesorio simple que permite enviar una receta.
* Blogs:
   * KennethDamianBlog: un blog fácilmente personalizable.
   * WordPressClone: un blog que se ve idéntico a Wordpress.
* GrooverWiki: una wiki.
* KPAX CMS: un Sistema de gestión de contenidos completo. Hace páginas web, wikis, blogs, chats, noticias, grupos, permisos, fuentes RSS.
* Podcasts: permite recibir, ver y escuchar podcasts de varias fuentes.
* Reddish: un clon de Reddit para la Google App Engine.
* QrOne CSS Designer: aplicación para diseñar CSS.
* DamianLogAnalizer: analizador de registros que hace gráficas.
* IsUp: prueba una lista de URLs cada 30 segundos y mantiene una base de datos cuando no responden.

Tres de ellas en otra parte:

* PyForum, un completo sistema de foro.
* T2, un plugin que implementa patrones de desarrollo web — registro, login, logout, grupos, accesos, adjuntos, comentarios, vistas previas, etc. —, con documentación extensiva.
* T3, una aplicación wiki que funciona en cualquier parte, incluyendo Google App Engine. Con Superpoderes: permite al administrador definir tablas en las bases de datos y embeber código Python.

ERP.

* DataWork. Un ERP de uso gratuito (funcionalidades limitadas) y de pago bajo demanda (todas las funcionalidades disponibles previo pago).

Una referencia rápida de la funcionalidad de alto nivel que fue agregada a web2py en T2 y T3: hoja de trucos T2/T3.

A su vez, existen aplicaciones de referencia realizadas con web2py (ver enlaces para mayor información):

* web2conf: Sistema para administración de conferencias (registro, propuestas de charlas, revisiones, feedback, etc.)
* web2py-wiki: una Wiki simple
* web2pyhl7: una aplicación médica (salud) implementando el estándar internacional HL7

## Plugins

Los "enchufables" de web2py (plugins) son funcionalidades autónomas que pueden ser agregadas a una aplicación existente. Usualmente definen componentes, por ejemplo objetos que pueden ser embebidos en una página y comunicarse con el servidor vía Ajax. Frecuentemente incluyen el correspondiente plugin jQuery y su funcionalidad del lado del servidor para hacerlos funcionar. En el Sitio Oficial puede encontrar varios ejemplos. La interfaz administrativa de web2py provee una interfaz web para subir y administrar los plugins. Una vez que el plugin es parte de su aplicación, puede adaptarlo sin afectar otras aplicaciones. Su apariencia puede ser adaptado por CSS.

## Web2py en la web

Estos son algunos de los sitios que utilizan web2py (para ver una lista más completa):

* https://web.archive.org/web/20100210043341/http://web2py.appspot.com/ clon de Reddit (llamado Reddish) sobre Google App Engine
* https://us.pycon.org/2010/register/ (enlace roto disponible en Internet Archive; véase el historial, la primera versión y la última). Sistema de Registración para PyCon 2009/2010
* http://www.institutopascal.edu.ar/flisol2010 Sistema de Conferencia para FLISOL 2010 (G.C.)
* http://qf.quadraforte.com/ "Aplicaciones web sólidas, ágiles y seguras en la Nube"
* https://web.archive.org/web/20091103104546/http://rheum.huh.harvard.edu/pgdemo "Ensamblaje colaborativo de árboles filogenéticos"
* https://web.archive.org/web/20091223065332/http://www.pyforum.org/ pyforum está basado en web2py
* http://code.google.com/p/web2pyhl7/ Aplicación médica (salud) HL7
