documento web2py

25
UNIVERSIDAD CENTRAL DEL ECUADOR OPTATIVA 2 FRAMEWORK WEB2PY (PYTHON) JUAN PABLO GUEVARA GORDILLO 01/11/2013

Upload: frameworkuce-uce

Post on 17-Dec-2014

215 views

Category:

Technology


6 download

DESCRIPTION

Framework con Phyton

TRANSCRIPT

Page 1: Documento Web2Py

UNIVERSIDAD CENTRAL DEL ECUADOR

OPTATIVA 2

FRAMEWORK WEB2PY (PYTHON)

JUAN PABLO GUEVARA GORDILLO

01/11/2013

Page 2: Documento Web2Py

INDICE

Introducción…………………………………………………………………..3

Definición……………………………………………………………………..5

Principios……………………………………………………………………..7

Plataformas Web…………………………………………………………….8

Modelo Vista Controlador…………………………………………………..9

¿Por qué Web2py?..............................................................................13

Seguridad…………………………………………………………………...14

Contenido del Paquete……………………………………………………16

Licencia……………………………………………………………………..17

Manual de Instalación……………………………………………………..18

Bibliografía………………………………………………………………….25

Page 3: Documento Web2Py

INTRODUCION

¿Qué es web2py?

Creado por una comunidad de profesionales y profesores universitarios en Ciencias de

la Computación e Ingeniería de Software.

Siempre compatible con versiones anteriores. No hemos roto la compatibilidad hacia

atrás desde la versión 1.0 en 2007, y nos comprometemos a no romper en el futuro.

Fácil de ejecutar. No requiere instalación ni configuración.

Se ejecuta en Windows, Mac, Unix / Linux, Google App Engine, Amazon EC2, y casi

cualquier alojamiento web a través de 2.5/2.6/2.7 Python o Java con Jython.

Funciona con Apache, Lighttpd, Cherokee y casi cualquier otro servidor web a través de

CGI, FastCGI, WSGI, mod_proxy, y / o mod_python. Puede insertar terceros WSGI

aplicaciones y middleware.

Habla con SQLite, PostgreSQL, MySQL, MSSQL, Firebird, Oracle, IBM DB2, Informix,

Ingres, y Google App Engine.

Asegure Evita los tipos más comunes de vulnerabilidades , incluyendo secuencias de

comandos entre sitios, los errores de inyección y ejecución de ficheros malintencionados.

Hace cumplir las buenas prácticas de ingeniería de software (validación del diseño, la

forma del lado del servidor Modelo-Vista-Controlador, devoluciones de datos) que hacen

que el código sea más legible, escalable y fácil de mantener.

Habla varios protocolos HTML / XML, RSS / ATOM, RTF, PDF, JSON, AJAX, XML-RPC,

CSV, REST, WIKI, Flash / AMF y Linked Data (RDF).

Incluye un servidor con SSL y con capacidad de streaming web, una base de datos

relacional, un entorno de desarrollo integrado basado en la web y la interfaz de

administración basada en web, la capa de abstracción de base de datos SQL que escribe

para usted en tiempo real, soporte de internacionalización, múltiples métodos de

autenticación, control de acceso basado en roles, un error de registro y emisión de billetes

del sistema, múltiples métodos de almacenamiento en caché para la escalabilidad, la

biblioteca jQuery para AJAX y los efectos, y una aplicación de andamiaje para impulsar el

desarrollo.

La mejor manera de entender web2py es intentarlo. Puedes probar en línea aquí (esta versión

en línea es idéntica a la web2py real aunque algunas funciones están desactivadas por

razones de seguridad).

web2py se inspiró en Ruby on Rails y, como Rails, se centra en el desarrollo rápido y sigue un

diseño Modelo Vista Controlador. web2py se diferencia de Rails, ya que está basado en

Python (por lo tanto, es más rápido y más escalable), ya que proporciona una interfaz de

administración basada en la Web completa (por lo tanto no hay necesidad de escribir nunca

comandos de shell a menos que desee), incluye bibliotecas para manejar más protocolos (por

ejemplo, XML-RPC y RSS), y se pueden ejecutar en el Google App Engine.

Page 4: Documento Web2Py

web2py también fue inspirado por Django y como Django, que tiene la capacidad de generar

formas de las tablas de base de datos e incluye un amplio conjunto de validadores. web2py se

diferencia de Django, ya que es más compacto, más fácil de aprender y no tiene ningún

archivo de configuración a nivel de proyecto.

web2py es menos detallado que los marcos basados en Java y su sintaxis es mucho más

limpio que los marcos basados en PHP. Esto hace más sencillo el desarrollo de aplicaciones y

más fácil de leer y de mantener.

Aquí es una comparación de las características web2py vs otros frameworks web populares.

web2py viene en versión de código fuente (para cualquier sistema operativo que se ejecuta

Python) y en las versiones binarias para OSX y Windows. web2py no necesita ser

instalado. Puedes descomprimirlo, haga clic en él, y elegir una contraseña de administrador de

una sola vez. A continuación, se abre el navegador para usted y le dirige a la interfaz

administrativa. Todo lo que necesita para hacer que esto ocurra (el intérprete de Python, el

servidor web, la base de datos relacional, etc) ya está empaquetado con web2py. Si usted

necesita más poder de personalizar sus aplicaciones para usar el servidor web preferido (por

ejemplo Apache) y el motor de base de datos preferido (por ejemplo PostgreSQL y Oracle).

A través de la interfaz de administración puede cargar una aplicación empaquetada, cree una

nueva aplicación, el diseño de una aplicación, mantener una aplicación existente, bytecode a

compilar una aplicación, mochila y descargar una aplicación. Todo se puede hacer a través de

la interfaz de administración basada en la web, incluyendo la edición de los archivos que

componen las aplicaciones, borrar archivos temporales, navegar entradas pasadas / errores,

ejecutar pruebas, interactuar con la base de datos. Si así lo desea, también es posible

interactuar con web2py a través de la shell del sistema operativo o de la terminal de Python.

Cualquier aplicación web2py está compuesta por 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 flujo de trabajo), Cron Jobs ( tareas que deben ejecutarse periódicamente

en segundo plano), Módulos (colecciones de clases reutilizables y funciones) y archivos

estáticos (imágenes, scripts, hojas de estilo, etc.)

Controladores consisten en funciones que se asocian a una URL y se llaman cuando se visita

la URL asociada. Los modelos se ejecutan antes de llamar a la función, independientemente

de la URL visitada (para cada aplicación). Las vistas se llama cuando la función devuelve

datos distintos de una cadena, y hace que los datos en el formato correcto (por ejemplo, html).

Una aplicación web2py puede ser tan simple como un único archivo (controladores /

default.py) que contiene:

def index (): return "Hola Mundo"

Cuando http://localhost:8000/app/default/index se visitó la función es llamada y muestra el

mensaje "Hello World".

Page 5: Documento Web2Py

Aquí es una completa aplicación más compleja que permite a los visitantes subir imágenes en

una base de datos:

En el modelo

1.

2.

. 3

4.

db=DAL('sqlite://storage.db')

db.define_table('image',

Field('name', notnull=True),

Field('file','upload'))

En Controller

1.

2.

3.

4.

5.

def índice ():

tipo = SQLFORM ( db . imagen .) proceso ()

si forma . aceptada :

la respuesta . Flash = 'Imagen cargada'

retorno lugareños ()

En Vista

1.

2.

3.

{{ extender 'layout.html " }}

< h1 > Imagen formulario de subida </ h1 >

{{= forma }}

Las imágenes subidas se cambia de manera segura para evitar vulnerabilidades de salto de

directorio, almacenados en el sistema de ficheros (o base de datos) y una entrada

correspondiente se inserta en la base de datos, vincular el archivo. Un mecanismo integrado

impide la sumisión involuntaria forma doble. Todos DB IO es transacción segura por

defecto. Cualquier excepción en el código hace que la operación de reversión.

DEFINICION

web2py es una plataforma web libre de código abierto para el ágil desarrollo de aplicaciones web seguras, sustentadas en base de datos. Está escrito en python y es programable en python; web2pyes una plataforma completa, lo que significa que contiene todos los componentes necesarios para construir aplicaciones web completamente funcionales; web2py está diseñado de manera que guía al desarrollador web a aplicar buenas prácticas de ingeniería de software, tales como el uso del patrón Model View Controler (MVC); web2py separa la representación de datos (el modelo) de la presentación de datos (la vista) y también de la lógica de la aplicación y flujo de trabajo (el controlador); web2py proporciona bibliotecas para ayudar a los desarrolladores a diseñar, implementar y probar cada una de estas tres partes por separado, para luego trabajar juntas.

Page 6: Documento Web2Py

web2py está diseñado para tener seguridad. Esto significa que automáticamente resuelve muchos de los problemas que pueden dar lugar a vulnerabilidades de seguridad, siguiendo prácticas bien establecidas. Por ejemplo, valida todas las entradas (para evitar las inyecciones de código), escapa todas las salidas (para evitar el cross-site scripting), cambia el nombre de los archivos cargados (para prevenir ataques que recorran el directorio). web2py deja poco espacio de maniobra a los desarrolladores de aplicaciones en cuestiones relativas a la seguridad.

web2py incluye una capa de abstracción de base de datos (DAL por su acrónimo en Inglés)

que escribe SQL dinámicamente para que usted, el desarrollador, no tenga que hacerlo. El

DAL sabe cómo generar SQL de forma transparente para Sqlite, Mysql, PostgreSQL, MSSQL,

FireBird, Oracle,IBM DB2,Informix e Ingres.El DAL también puede generar llamadas a

funciones para Google BigTable cuando se ejecuta en el Google App Engine (GAE). Una vez

que una o más tablas de bases de datos están definidas, web2py también genera una interfaz

de administración de base de datos basada en la web, la cual es totalmente funcional para

acceder a la base de datos y las tablas.

web2py difiere de otras plataformas web porque es la única que acoge plenamente el paradigma Web 2.0, donde la red es el computador. De hecho, web2py no requiere instalación o configuración, sino que funciona en cualquier arquitectura en la que se puede ejecutar python (Windows, Windows CE, Mac OS X, iPhone, y Unix/Linux), y las fases de desarrollo, despliegue y mantenimiento para las aplicaciones se pueden hacer mediante una interfaz web local o remota. web2py se ejecuta con Cpython (la implementación C) y Jython (la implementación Java), versiones de 2.4 , 2.5 y 2.6 aunque “oficialmente” sólo soporta 2.5 para así poder garantizar la compatibilidad con versiones previas de aplicaciones.

web2py proporciona un sistema de boletos. Si ocurre un error, los boletos se expiden para el usuario, y el error se registra para el administrador.

web2py es de código abierto y está liberado bajo la licencia GPL 2.0, pero las aplicaciones desarrolladas con web2py no están sujetas a ninguna restricción de licencia. De hecho, siempre y cuando no contengan el código fuente web2py, no se consideran “obra derivada”. web2py también le permite al desarrollador compilar en bytecode las aplicaciones y distribuirlas como de código cerrado, aunque se requiera web2py para ejecutarlas. La licencia web2py incluye una excepción que permite a los desarrolladores web enviar sus productos con binarios originales web2py pre-compilados, sin el acompañamiento del código fuente.

Otra característica de web2py es que nosotros, sus desarrolladores, nos comprometemos a mantener la compatibilidad con versiones previas en futuras versiones. Lo hemos hecho desde la primera versión de web2py en octubre de 2007. Nuevas funciones se han añadido y errores se han corregido, pero si un programa trabajó con web2py 1.0, el programa seguirá funcionando en la actualidad.

Estos son algunos ejemplos de declaraciones web2py que ilustran su potencia y simplicidad. El siguiente código:

1 db.define_table('person', Field('name'), Field('image', 'upload'))

Page 7: Documento Web2Py

Crea una tabla de base de datos llamada “person” con dos campos: “name”, una cadena; e “image”, algo que necesita ser cargado (la imagen real). Si la tabla ya existe, pero no coincide con esta definición, se cambia de manera acorde.

Dada la tabla definida anteriormente, el siguiente código:

1 form = crud.create(db.person)

Crea un formulario de ingreso de datos para esta tabla que permite a los usuarios cargar imágenes. También valida los datos ingresados al formulario, le cambia el nombre a la imagen cargada en forma segura, almacena la imagen en un archivo, inserta el registro correspondiente en la base de datos, impide que se trate de registrar de nuevo, y eventualmente modifica el formulario en sí agregando mensajes de error si los datos presentados por el usuario no pasan la validación.

El siguiente código:

@auth.requires_permission('read','person') def f(): ....

Evita que el visitante acceda a la función f a menos que éste sea miembro de un grupo cuyos miembros tienen permisos para “leer” los registros de la tabla “person”. Si el visitante no ha iniciado sesión, se le direcciona a una página para hacerlo (generada por defecto por web2py).

El siguiente código incorpora un elemento de página.

{{=LOAD('other_controller','function.load',ajax=True, ajax_trap=True)}}

Esto le dice a web2py que cargue en una vista el contenido generado por la función other_controller (funciona con cualquier función). Carga el contenido a través de Ajax, lo inserta en la página actual (utilizando la disposición actual y no la de la función other_controller), y encierra todos los formularios que están en el contenido cargado de tal modo que también son enviados a través de Ajax sin recargar la página. También puede CARGAR (LOAD) el contenido de aplicaciones que no son web2py.

El ayudante de carga (LOAD) permite un diseño modular de aplicaciones; ésto se discute en detalle en el último capítulo de este libro.

Principios

La programación python típicamente sigue estos principios básicos:

No te repitas (DRY por su acrónimo en Inglés). Debe haber una sola manera de hacer las cosas. Explícito es mejor que implícito.

Page 8: Documento Web2Py

web2py abarca plenamente los dos primeros principios, forzando al desarrollador a utilizar buenas prácticas de ingeniería de software que desalientan la repetición de código. web2py guía al desarrollador a través de casi todas las tareas comunes en el desarrollo de aplicaciones web (la creación y el procesamiento de formularios, gestión de sesiones, cookies, errores, etc.).

web2py se diferencia de otras plataformas en relación con el tercer principio, que a veces entra en conflicto con los otros dos. En particular, web2py no importa aplicaciones de usuario sino que las ejecuta en un contexto predefinido. Este contexto expone las palabras clave de python, así como las palabras clave de web2py.

Para algunos esto puede parecer magia, pero no debería. En la práctica, simplemente algunos módulos ya se han importado sin que usted tenga que hacerlo. web2py está tratando de evitar la molesta característica de otras plataformas de forzar al desarrollador a importar los mismos módulos en la cabecera de cada modelo y controlador.

web2py, al importar sus propios módulos, ahorra tiempo y evita errores, siguiendo así el espíritu de “no te repitas” y “debe haber una sola manera de hacer las cosas”.

Si el desarrollador desea utilizar otros módulos de python o módulos de terceros, éstos deben ser importados de forma explícita, como en cualquier otro programa de python.

Plataformas Web

En su nivel más fundamental, una aplicación web se compone de un conjunto de programas (o funciones) que se ejecutan cuando el URL correspondiente es visitado. La salida del programa se ofrece al visitante y es mostrada por el navegador.

El propósito de las plataformas web es permitir a los desarrolladores crear nuevas aplicaciones de forma rápida, fácil y sin cometer errores. Esto se hace proporcionando APIs y herramientas que reducen y simplifican la cantidad de códigos que se necesitan.

Los dos enfoques clásicos para el desarrollo de aplicaciones web son:

Generación de HTML programando. Inserción de código en páginas HTML.

El primer modelo fue seguido, por ejemplo, para los primeros scripts CGI. El segundo modelo fue seguido, por ejemplo, por PHP (donde el código está en PHP, un lenguaje parecido a C), ASP (donde el código está en Visual Basic), y JSP (aquí el código está en Java).

Aquí presentamos un ejemplo de un programa PHP que, cuando se ejecuta, recupera datos de una base de datos y devuelve una página HTML que muestra los registros seleccionados:

1

2

3

4

5

6

7

<html><body><h1>Records</h1>

mysql_connect(localhost,username,password);

@mysql_select_db(database) or die( "Unable to select database");

$query="SELECT * FROM contacts";

$result=mysql_query($query);

mysql_close();

Page 9: Documento Web2Py

8

9

10

11

12

13

$i=0;

while ($i < mysql_numrows($result)) {

$name=mysql_result($result,$i,"name");

$phone=mysql_result($result,$i,"phone");

echo "<b>$name</b><br>Phone:$phone<br /><br /><hr /><br />";

$i++;

}

?></body></html>

El problema con este enfoque es que el código está embebido en páginas HTML, pero este mismo código también necesita generar HTML adicional y generar las instrucciones SQL para consultar la base de datos, enredando múltiples capas de la aplicación y haciéndola difícil de leer y mantener. La situación es aún peor para las aplicaciones Ajax y la complejidad aumenta con el número de páginas (archivos) que componen la aplicación.

La funcionalidad del ejemplo de arriba puede expresarse en web2py con dos líneas de código python:

1

2

def index():

return HTML(BODY(H1('Records'), db().select(db.contacts.ALL)))

En este sencillo ejemplo, la estructura de las páginas HTML se representa mediante programación por el HTML, BODY y los objetos H1, la base de datos db es consultada por la orden select y, finalmente, todo se serializa en HTML. Observe que db no es una palabra clave, sino una variable definida por el usuario. Vamos a utilizar ese nombre constantemente para referirnos a una conexión de base de datos para evitar confusiones.

Las plataformas Web suelen ser catalogadas como uno de estos dos tipos: Una plataforma “adherida” que se construye mediante el ensamblaje (adhesión) de varios componentes de terceros. Una plataforma “apilada completamente” que se construye mediante la creación de componentes diseñados específicamente para ser integrados estrechamente y que trabajen juntos. web2py es una plataforma “apilada completamente”. Casi todos sus componentes se construyen a partir de cero y están diseñados para trabajar juntos, pero funcionan igual de bien fuera de la plataformaweb2py. Por ejemplo, la capa de abstracción de base de datos (DAL) o el lenguaje de la plantilla se puede utilizar independientemente del marco web2py importando gluon.sql o gluon.templatedentro sus propias aplicaciones python. Gluon es el nombre del módulo web2py que contiene librerías del sistema. Algunas librerías de web2py, tales como las de los formularios para la construcción y el procesamiento de tablas de base de datos, tienen dependencias en otras partes de web2py. web2py también puede trabajar con las librerías de python de terceros, incluidos otros lenguajes de plantillas y DALs, pero no estarán tan bien integradas como los componentes originales.

Modelo-Vista-Controlador

web2py incentiva al desarrollador a que separe la representación de los datos (el modelo), la presentación de datos (la vista) y el flujo de

trabajo de la aplicación (el controlador). Consideremos de nuevo el ejemplo anterior y veamos la forma de construir una

aplicación web2py basado en él. He aquí un ejemplo de la interfaz de edición web2py MVC:

Page 10: Documento Web2Py

El flujo de trabajo típico de una petición en web2py se describe en el siguiente diagrama: En el diagrama:

Page 11: Documento Web2Py

En el diagrama:

El servidor puede ser el servidor incluido en web2py o un servidor de terceros, tal como Apache. El servidor maneja multi-tarea.

“principal” es la aplicación principal WSGI. Realiza todas las tareas comunes y envuelve las aplicaciones de usuario. Se encarga de los cookies, sesiones, transacciones, enrutamiento de url y enrutamiento inverso, además de la distribución.

Este puede ofrecer y transmitir archivos estáticos si es que el servidor web no lo está haciendo ya:

Los Modelos, Vistas y componentes del Controlador componen la aplicación de usuario.

Se pueden alojar múltiples aplicaciones en la misma instancia web2py. Las líneas punteadas representan la comunicación con el motor(es) de base de datos.

Las consultas de base de datos se pueden escribir en SQL crudo (no se aconseja) o utilizando la capa de abstracción de base de datos (recomendado), de modo que el código de aplicación web2py no dependa de un motor de base de datos particular.

El despachador “mapea” la dirección URL solicitada a una llamada de función en el controlador. La salida de la función puede ser una cadena o un diccionario de símbolos (una tabla hash). Los datos en el diccionario son representados por una vista. Si el visitante solicita una página HTML (por defecto), el diccionario se representa en una página HTML. Si el visitante solicita la misma página en XML, web2py trata de encontrar una vista que pueda presentar el diccionario en formato XML. El desarrollador puede crear vistas para presentar páginas en cualquiera

Page 12: Documento Web2Py

de los protocolos ya soportados (HTML, XML, JSON, RSS, CSV, RTF) o en otros protocolos personalizados.

Todas las llamadas se encierran en una transacción, y cualquier excepción no detectada hace que la transacción se cancele. Si la solicitud se realiza correctamente, la transacción se confirma.

web2py también se ocupa de las sesiones y cookies de sesión de forma automática, y cuando una transacción se confirma, la sesión también se almacena, a menos que se especifique lo contrario.

Es posible registrar tareas recurrentes (a través de cron) para ejecutarse en horas específicas y/o después de la realización de determinadas acciones. De esta manera es posible ejecutar tareas computacionales largar e intensivas en segundo plano sin que la navegación se ponga lenta.

Aquí se presenta una completa y minimalista aplicación MVC, que consta de tres archivos.

“db.py” es el modelo:

1

2

3

4

db = DAL('sqlite://storage.sqlite')

db.define_table('contacts',

Field('name'),

Field('phone'))

Se conecta a la base de datos (en este ejemplo una base de datos SQLite almacenada en el archivo storage.sqlite) y define una tabla llamada contacts. Si la tabla no existe, web2py la crea y, de forma transparente y en segundo plano, genera código SQL en el dialecto SQL adecuado para el motor de base de datos específico usado. El desarrollador puede ver el SQL generado, pero no necesita cambiar el código si la interfaz administrativa de la base de datos, que por defecto es SQLite, se sustituye con MySQL, PostgreSQL, MSSQL, Firebird, Oracle, DB2, Informix, Interbase, Ingres, o Google Big Tables o Google App Engine.

Una vez que una tabla está definida y creada, web2py también genera una interfaz de administración de base de datos basada en web totalmente funcional, llamada appadmin, para acceder a la base de datos y las tablas.

“default.py” es el controlador:

1

2

def contacts():

return dict(records=db().select(db.contacts.ALL))

En web2py, las direcciones URL se asignan a los módulos de python y a llamadas de funciones. En este caso, el controlador contiene una sola función (o “acción”) llamada contacts. Una acción puede devolver una cadena (la pagina web devuelta) o un diccionario python (un conjunto de pares key: value). Si la función devuelve un diccionario, se pasa a una vista con el mismo nombre que el del controlador/función, que a su vez devuelve la página. En este ejemplo, la función contacts realiza un select de base de datos y devuelve los registros resultantes como un valor asociado con la clave records del diccionario.

“default/contacts.html” es la vista:

{{extend 'layout.html'}}

<h1>Records</h1>

{{for record in records:}}

{{=record.name}}: {{=record.phone}}<br />

Page 13: Documento Web2Py

{{pass}}

Esta vista es llamada automáticamente por web2py después de que la función del controlador asociado (acción) se ejecuta. El propósito de esta vista es devolver las variables en el diccionario obtenido records =... al HTML. El archivo vista está escrito en HTML, pero inserta código python delimitado por los delimitadores especiales {{y}}. Esto es muy diferente del ejemplo de código PHP, ya que el único código insertado en el código HTML es el código de la “capa de presentación”. El archivo “layout.html” al que se hace referencia en la parte superior de la vista es proporcionado porweb2py y constituye la estructura básica para todas las aplicaciones web2py. Dicho archivo puede ser fácilmente modificado o sustituido.

¿Por qué web2py?

web2py es una de las múltiples plataformas de aplicaciones web, pero tiene características únicas y convincentes. web2py se desarrolló originalmente como una herramienta de enseñanza, con las siguientes motivaciones principales:

Que sea fácil para los usuarios aprender desarrollo web del lado del servidor sin comprometer funcionalidad. Por esta razón, web2py no requiere instalación ni configuración; no tiene dependencias (excepto para la distribución de código fuente, que requiere python 2.5 y sus módulos de librerías estándar) y expone la mayor parte de su funcionalidad a través de una interfaz de navegador Web.

web2py se ha mantenido estable desde el primer día, dado que sigue un diseño de arriba hacia abajo, es decir, su API fue diseñado antes de ser implementado. A pesar de que nuevas funcionalidades han sido añadidas, web2py nunca ha roto la compatibilidad con versiones anteriores, y no la romperá cuando se añadan funcionalidades adicionas en el futuro.

web2py ataca de manera pro activa las cuestiones de seguridad más importantes que aquejan muchas aplicaciones web modernas, según lo determinado por OWASP (19) más abajo.

web2py es ligero. Sus librerías centrales, incluyendo la capa de abstracción de bases de datos, el lenguaje de la plantilla y todas las ayudas constan en total de 1.4MB. Todo el código fuente incluyendo aplicaciones de muestra e imágenes alcanzan los 10.4MB.

web2py ocupa poco espacio y es muy rápido. Utiliza el servidor Web Rocket(22) WSGI desarrollado por Timothy Farrell. Es 30% más rápido que Apache con mod_proxy. Nuestras pruebas también indican que, en un PC promedio, éste sirve una página dinámica media sin acceso de base de datos en aproximadamente 10 ms. La DAL tiene una tasa de sobrecarga muy baja, por lo general inferior al 3%.

WSGI (Web Server Gateway Interface) es un estándar python emergente para comunicaciones entre un servidor de web y aplicaciones Phyton.

A continuación una muestra de la pantalla de la principal interfaz admin de web2py:

Page 14: Documento Web2Py

Seguridad

El Proyecto de Seguridad de Aplicaciones Web Abiertas (19) (OWASP por sus siglas en inglés) es una comunidad mundial abierta y libre enfocada en la mejora de la seguridad de aplicaciones de software.

OWASP ha incluido los diez principales temas de seguridad que ponen en riesgo las aplicaciones web. Dicha lista se reproduce aquí, junto con una descripción de cómo cada tema es abordado por web2py:

“Cross Site Scripting (XSS): Las fallas de XSS ocurren cuando una aplicación toma los datos suministrados por el usuario y los envía a un navegador web sin validar o codificar el contenido. XSS permite a los atacantes ejecutar scripts en el navegador de la víctima lo cual puede secuestrar sesiones de usuario, deformar sitios web, posiblemente introducir gusanos, etc.”web2py_, por defecto, escapa todas las variables presentadas en la vista, previniendo que ocurra XSS.

“Las fallas de inyección, en particular inyección SQL, son comunes en aplicaciones web. La inyección se produce cuando los datos ingresados por el usuario son enviados a un intérprete como parte de un comando o consulta. Los datos hostiles del atacante engañan al intérprete para que ejecute comandos no deseados o cambie los datos.” web2py_ incluye una Capa de abstracción de base de datos que hace imposible la inyección SQL. Normalmente, las declaraciones SQL no están escritas por el desarrollador. En su lugar, el código SQL es generado dinámicamente por el DAL, asegurando que todos los datos insertados sean escapados correctamente.

“Ejecución de archivos maliciosos: Código vulnerable a la inclusión de archivos remotos (RFI) permite a los atacantes incluir código hostil y datos, resultando en ataques devastadores, como el compromiso total del servidor. web2py sólo permite que sean ejecutadas las funciones expuestas, previniendo la ejecución de archivos

Page 15: Documento Web2Py

maliciosos. Funciones importadas nunca son expuestas; sólo las acciones son expuestas.” web2py_ utiliza una interfaz de administración basada en Web que hace muy fácil hacer un seguimiento de lo que se expone y lo que no.

“Una referencia directa a objetos se produce cuando un desarrollador expone una referencia a un objeto de implementación interna, tal como un archivo, directorio, registro de base de datos, o clave, como una URL o un parámetro de formulario. Los atacantes pueden manipular esas referencias para tener acceso a otros objetos sin autorización. web2py no expone ningún objeto interno y además valida todas las direcciones URL, con lo que logra la prevención de ataques que recorran el directorio.” web2py_ también proporciona un mecanismo simple para crear formularios que validan automáticamente todos los valores ingresados.

“Requerimiento falsificado Cross-site (CSRF): Un ataque CSRF obliga a una sesión de usuario en el navegador de la víctima a enviar una solicitud pre-autentificada a una aplicación web vulnerable, lo que entonces obliga al navegador de la víctima a realizar una acción hostil en beneficio del atacante. CSRF puede ser tan poderosa como la aplicación web que ataca.”web2py_ previene CSRF, así como el doble ingreso de los datos en formularios mediante la asignación de una única ficha aleatoria a cada formulario. Además web2py_ utiliza UUID para la cookie de sesión.

“Fugas de información y manejo de errores inapropiado: Las aplicaciones pueden provocar fugas no intencionales de información relacionada con su configuración, funcionamiento interno, o violar la privacidad a través de una variedad de problemas de aplicación. Agresores utilizan esta debilidad para robar datos importantes, o realizar ataques más graves.” web2py_ incluye un sistema de tickets. Ningún error puede resultar en código que se expone a los usuarios. Todos los errores son registrados y los tickets se expiden al usuario lo que permite el seguimiento del error. Errores y códigos fuente son accesibles sólo para el administrador.

“Administración de sesión y autentificación rota: las credenciales de cuentas y las fichas de sesión a menudo no son debidamente protegidas. Los atacantes comprometen las contraseñas, claves o las fichas de autenticación para asumir las identidades de otros usuarios.” web2py_ proporciona un mecanismo integrado para la autenticación de administrador, y gestiona de forma independiente sesiones para cada aplicación. La interfaz de administración también obliga a la utilización de cookies de sesión segura cuando el cliente no es “localhost”. Para aplicaciones, incluye un potente API de control de acceso basado en roles.

“Almacenamiento criptográfico inseguro: las aplicaciones web rara vez utilizan de manera correcta las funciones criptográficas para proteger los datos y las credenciales. Agresores utilizan datos protegidos débilmente para llevar a cabo el robo de identidad y otros delitos, tales como fraude de tarjeta de crédito.” web2py_ utiliza los algoritmos hash MD5 o HMAC la + SHA-512 para proteger las contraseñas almacenadas. Otros algoritmos también están disponibles.

“Comunicaciones inseguras: Las aplicaciones frecuentemente fallan en encriptan el tráfico de red cuando es necesario para proteger las comunicaciones sensibles.” web2py_ incluye el servidor con SSL(21) Rocket WSGI, pero también puede usar Apache o Lighttpd y mod_ssl para proporcionar cifrado SSL de las comunicaciones.

“Falla en restringir acceso URL: Con frecuencia una aplicación sólo protege la funcionalidad sensible al impedir la visualización de los enlaces o direcciones URL a usuarios no autorizados. Atacantes pueden usar esta debilidad para acceder y realizar operaciones no autorizadas mediante el acceso a las URL directamente.” web2py_ mapea las solicitudes de URL a los módulos y funciones de python. Además proporciona un mecanismo para que se especifique cuáles son funciones públicas y cuales requieren autenticación y autorización. El API de control de acceso basado en roles incluido, permite a los desarrolladores restringir el acceso a cualquier función

Page 16: Documento Web2Py

basados en la sesión, pertenencia a grupos o permisos basados en grupos. Los permisos son muy granulares y se pueden combinar con CRUD para permitir, por ejemplo, acceso a los tablas y/o registros específicos.

web2py fue revisado en el aspecto de seguridad y usted puede encontrar el resultado de esta revisión en la referencia 20.

Contenido del paquete

web2py se puede descargar desde el sitio web oficial:

http://www.web2py.com

web2py consiste de lo siguiente:

librerías: proporcionan funcionalidad básica del web2py y son accesibles mediante programación.

servidor web: el servidor web Rocket WSGI. la aplicación admin: se utiliza para crear, diseñar y administrar otras

aplicaciones web2py. Admin proporciona una solución completa basada en el Entorno de Desarrollo Integrado Web (IDE) para la creación de aplicaciones web2py.

También incluye otras funcionalidades, como las pruebas basadas en web y un shell basado en web.

La aplicación example: contiene la documentación y ejemplos interactivos. example es un clon del sitio web oficial web2py.com, e incluye la documentación epydoc.

la aplicación welcome: la plantilla base para cualquier otra aplicación. Por defecto incluye un menú en cascada CSS puro y autenticación de usuarios (se discute en el capítulo 8).

web2py se distribuye en código fuente, y en formato binario para Microsoft Windows y para Mac OS X.

La distribución de código fuente puede ser utilizada en cualquier plataforma donde python se ejecuta e incluye los componentes antes mencionados. Para ejecutar el código fuente, se necesita python 2.5 preinstalado en el sistema. También es necesario uno de los motores de base de datos compatible ya instalado. Para pruebas y aplicaciones de poca demanda, puede utilizar la base de datos SQLite, incluida en python 2.5.

Las versiones binarias de web2py (para Windows y Mac OS X) incluyen un intérprete para python 2.5 y la base de datos SQLite. Técnicamente, estos dos no son componentes de web2py. Su inclusión en las distribuciones binarias le permite usar web2py de inmediato.

La siguiente imagen describe la estructura general de web2py:

Page 17: Documento Web2Py

Licencia

La licencia web2py está registrada bajo GPL versión 2. El texto completo de la licencia está disponible en la referencia 31. La licencia incluye pero no se limita a los siguientes artículos: 1. Usted puede copiar y distribuir copias exactas del código fuente del Programa, según lo has recibido, por cualquier medio, siempre que publique en cada copia un anuncio apropiado de copyright y ausencia de garantía; mantenga intactos todos los anuncios que se refieran a esta Licencia y a la ausencia de garantías, y proporcione a cualquier otro receptor del programa una copia de esta licencia junto con el Programa. [...] 4. Usted no puede copiar, modificar, sublicenciar o distribuir el Programa excepto como prevé expresamente esta Licencia. Cualquier intento de copiar, modificar, sublicenciar o distribuir el Programa fuera de éstas restricciones es nulo, y terminará automáticamente sus derechos bajo esta Licencia. [...] 11. COMO EL PROGRAMA SE LICENCIA GRATIS, NO HAY GARANTÍA PARA EL PROGRAMA, EN LA MEDIDA PERMITIDA POR LA LEY. EXCEPTO CUANDO ASÍ LO DECLAREN POR ESCRITO LOS TITULARES DEL COPYRIGHT Y/ U OTRAS PARTES PROPORCIONAN EL PROGRAMA <<TAL CUAL>>, SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA, INCLUYENDO, PERO NO LIMITADA A, LAS GARANTÍAS IMPLÍCITAS DE COMERCIALIZACIÓN Y CAPACIDAD PARA UN PROPÓSITO PARTICULAR . LA TOTALIDAD DE LOS RIESGOS EN CUANTO A LA CALIDAD Y LOS RESULTADOS DEL PROGRAMA SON SUYOS. SI EL PROGRAMA RESULTARA DEFECTUOSO, USTED ASUME EL COSTO DE CUALQUIER SERVICIO, REPARACIÓN O CORRECCIÓN. EN NINGÚN CASO A MENOS LO EXIJA LA LEY APLICABLE O HAYA SIDO ACORDADO POR ESCRITO, NINGÚN TENEDOR DEL COPYRIGHT NI NINGUNA OTRA PARTE QUE MODIFIQUE Y/O REDISTRIBUYA EL PROGRAMA EN LOS LUGARES PERMITIDOS, SERÁN RESPONSABLES ANTE USTED POR DAÑOS, INCLUYENDO CUALQUIER DAÑO GENERAL, ESPECIALES, INCIDENTALES O DERIVADOS DEL USO O INCAPACIDAD DE USAR EL PROGRAMA (INCLUYENDO PERO NO LIMITADO A PÉRDIDA O LA GENERACIÓN INCORRECTA DE DATOS O PÉRDIDAS SUFRIDAS POR USTED O TERCERAS PARTES O UN FALLO DEL PROGRAMA AL FUNCIONAR CON CUALQUIER OTRO PROGRAMA), INCLUSO SI DICHO TITULAR U OTRA PARTE HA SIDO ADVERTIDO DE LA POSIBILIDAD DE TALES DAÑOS. web2py incluye código de otros (por ejemplo, el intérprete de python, el servidor Rocket web , y algunas librerías JavaScript). Sus autores respectivos y sus licencias son reconocidos en el oficial WebSite(1) y en el propio código. Las aplicaciones desarrolladas con web2py, siempre y cuando no incluyan el código fuente web2py, no se consideran obras derivadas. Esto significa que no están sujetos a la licencia GPLv2, y usted puede distribuir las aplicaciones que desarrolló bajo cualquier licencia que usted elija, incluyendo un código cerrado y/o licencia comercial. Excepción de la Licencia Comercial La licencia web2py también incluye una excepción comercial:

Usted puede distribuir una aplicación que se desarrolló con web2py junto con una distribución binaria oficial sin modificar de web2py, como la que puede descargarse de la página oficial(1), siempre y cuando quede claro en la licencia de su aplicación cuales archivos pertenecen a la aplicación y cuales pertenecen a web2py.

Page 18: Documento Web2Py

MANUAL DE INSTALACION

Descargar python de la página:

www.python.org

Nota que sea versión 2.7.X no la 3 a causa de incompatibilidad con el framwork web2py

Page 19: Documento Web2Py

Descargar web2py del sitio oficial:

www.web2py.com

Page 20: Documento Web2Py

Descarga web2py para el Sistema Operativo de su agrado.

Archivo ya descargados:

a) phython

b) web2py_win.zip

Descomprimir el archivo zip de web2py

Page 21: Documento Web2Py

Hacer doble click izquierdo en web2py.exe para iniciar la ejecución de web2py

Elegir la dirección IP a usar ya sea pública o local. Ademas de poner el puerto y un password

de administrador.

Page 22: Documento Web2Py

Ejecución de web2py en el navegador por defecto y luego hacer click en Interfaz

Administrativa.

Page 23: Documento Web2Py

Página de Administración de Aplicaciones.

Pagina para administrar la aplicación seleccionada anteriormente.

Page 24: Documento Web2Py
Page 25: Documento Web2Py

BIBLIOGRAFIA

http://www.python.org/

http://www.web2py.com/init/default/documentation

https://github.com/mjhea0/web2py

http://www.latinuxpress.com/books/drafts/web2py/

http://www.youtube.com/watch?v=Cx0fKJP6ab8

http://www.youtube.com/watch?v=mWTbJv-hRkc

http://es.wikipedia.org/wiki/Web2py