¿Qué es web2pyTM?

La mejor forma de entender a web2py es probandolo. Puede probarlo en linea aquí. Esta versión online es idéntica al web2py real aunque algunas funciones han sido deshabilitadas por razones de seguridad.

web2py fue inspirado por Ruby on Rails y, como Rails, se enfoca en el desarrollo rápido y sigue un diseño Modelo Vista Controlador. web2py se diferencia de Rails porque está basado en Python (por lo tanto es más rápido y escalable), provee una amplia interfaz administrativa basada en web (no hay necesidad de escribir órdenes en la línea de comándos, salvo que así lo deseara), incluye bibliotecas para manejar más protocolos (por ejemplo XML-RPC y RSS feeds), y puede correr sobre Google App Engine.

web2py fue también inspirado por Django y, como Django, tiene la habilidad de generar formularios para las tablas de la base de datos e incluye un extenso conjunto de validadores. web2py se diferencia de Django porque es más compacto, fácil de leer y no tiene ningún archivo de configuración a nivel de proyecto.

web2py es menos verboso que frameworks basadas en Java y su sintaxis es mucho más clara que los basados en PHP. Esto hace a las aplicaciones más simples de desarrollar, más fácil de leer y mantener.

Aquí está una comparación de características de web2py versus otros frameworks web populares

web2py viene en versión de código fuente (para cualquier Sistema Operativo que soporte Python) y en versiones binarias para OSX y Windows. web2py no necesita ser instalado. Lo descomprime, cliquea en él, y elije una contraseña temporal. Entonces se abre un navegador con la interfaz administrativa. Todo lo necesario para que esto suceda (el interprete Python, el servidor web, la base de datos relacional, etc.) está ya empaquetado con web2py. Si necesita más poder puede personalizar sus aplicaciones para usar su servidor web preferido (por ejemplo Apache) y su motor de base de datos preferida (por ejemplo PostgreSQL u Oracle).

Vía la interfaz administrativa puede subir una aplicación empaquetada, crear una nueva aplicación, diseñar o mantener, compilar a bytecode, empaquetar y descargar una aplicación existente. Todo puede ser hecho vía la interfaz administrativa basada en web, incluyendo la edición de archivos que componen la aplicación, limpiar temporales, navegar por tickets/errores pasados, ejecutar pruebas, interactuar con la base de datos. Si lo desea, también es posible interactuar con web2py vía el intérprete del Sistema Operativo o de Python.

Cualquier aplicación web2py está compuesta de Modelos (archivos que contienen una descripción de la representación de los datos), Vistas (archivos que contienen una descripción de la presentación de los datos), Controladores (archivos que contienen una descripción de la lógica del negocio y el flujo de trabajo), Trabajos Programadas (tareas que necesitan ser ejecutadas regularmente en segundo plano), Módulos (colecciones de clases y funciones reusables), y Archivos Estáticos (imágenes, scripts, hojas de estilos, etc.).

Los Controladores consisten en funciones que están asociadas a una URL y son llamadas cuando la URL asociada es visitada. Los Modelos son ejecutados antes de que la función sea llamada, independientemente de la URL visitada (para cada aplicación). Las Vistas son llamadas cuando una función regresa datos que no sean cadenas, y arma los datos en el formato correcto (por ejemplo HTML).

Una aplicación web2py puede ser tan simple como un archivo individual (controllers/default.py) conteniendo:

def index(): return "Hola Mundo"

Cuando se visita http://localhost:8000/app/default/index la función es llamada y muestra el mensaje "Hola Mundo".

Aquí está una aplicación completa más compleja que permite ver al visitante las imágenes subidas a una base de datos:

















# en el Modelo
db=DAL('sqlite://storage.db')
db.define_table('imagen',
Field('nombre'),
Field('archivo','upload'))

# en el Controlador
def index():
form = SQLFORM(db.imagen)
if form.accepts(request.vars, session):
response.flash = 'imagen subida'
return dict(form = form)

# en la Vista
{{extend 'layout.html'}}
<
h1>Formulario para subir imágene</h1>
{{=
form}}

Las imágenes subidas son renombradas de manera segura para evitar vulnerabilidades transversal de directorios, almacenados en el sistema de archivos (o bases de datos) y una entrada es agregada a la base de datos, enlazandola al archivo. Un mecanismo incorporado previene el doble envío involuntario de formularios. Toda E/S a la BD es segura respecto a transacciones por defecto. Cualquier excepción en el código causa que la transacción sea abortada.

Ejemplos de aplicaciones más complejas pueden ser encontrados en aaquí