SlideShare a Scribd company logo
1 of 25
Download to read offline
UNIVERSIDAD CENTRAL DEL ECUADOR

OPTATIVA 2

FRAMEWORK WEB2PY (PYTHON)

JUAN PABLO GUEVARA GORDILLO
01/11/2013
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
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.
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".
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. db=DAL('sqlite://storage.db')
2. db.define_table('image',
. 3
4.

Field('name', notnull=True),
Field('file','upload'))

En Controller
1. def índice ():
2.
3.
4.
5.

tipo = SQLFORM ( db . imagen .) proceso ()
si forma . aceptada :
la respuesta . Flash = 'Imagen cargada'
retorno lugareños ()

En Vista
1. {{ extender 'layout.html " }}
2. < h1 > Imagen formulario de subida </ h1 >
3. {{= 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.
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'))
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.
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();
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:
El flujo de trabajo típico de una petición en web2py se describe en el siguiente diagrama: En el diagrama:
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




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 />
{{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
comunicaciones entre un servidor de web y aplicaciones Phyton.
A continuación una muestra de la pantalla de la principal interfaz admin de web2py:

para
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














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
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:
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.
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
Descargar web2py del sitio oficial:
www.web2py.com
Descarga web2py para el Sistema Operativo de su agrado.

Archivo ya descargados:
a) phython
b) web2py_win.zip

Descomprimir el archivo zip de 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.
Ejecución de web2py en el navegador por defecto y luego hacer click en Interfaz
Administrativa.
Página de Administración de Aplicaciones.

Pagina para administrar la aplicación seleccionada anteriormente.
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

More Related Content

What's hot

Interfaces en dispositivos móviles
Interfaces en dispositivos móvilesInterfaces en dispositivos móviles
Interfaces en dispositivos móviles
Chayincitha MAciaz
 
Diagrama de componentes
Diagrama de componentesDiagrama de componentes
Diagrama de componentes
uitron
 
Proyecto de software
Proyecto de softwareProyecto de software
Proyecto de software
monik1002
 
Presentacion herramientas CASE
Presentacion herramientas CASEPresentacion herramientas CASE
Presentacion herramientas CASE
davidsande
 
Nivel de abstraccion
Nivel de abstraccionNivel de abstraccion
Nivel de abstraccion
noe_isaack
 

What's hot (20)

Metodología WEB UWE
Metodología WEB UWEMetodología WEB UWE
Metodología WEB UWE
 
Relación del DBA con otras áreas.
Relación del DBA con otras áreas.Relación del DBA con otras áreas.
Relación del DBA con otras áreas.
 
Apache CouchDB
Apache CouchDBApache CouchDB
Apache CouchDB
 
B. manejo de concurrencia
B.  manejo de concurrenciaB.  manejo de concurrencia
B. manejo de concurrencia
 
Interfaces en dispositivos móviles
Interfaces en dispositivos móvilesInterfaces en dispositivos móviles
Interfaces en dispositivos móviles
 
Couchdb
CouchdbCouchdb
Couchdb
 
Diagrama de componentes
Diagrama de componentesDiagrama de componentes
Diagrama de componentes
 
Proyecto de software
Proyecto de softwareProyecto de software
Proyecto de software
 
ASP.NET WEB API
ASP.NET WEB APIASP.NET WEB API
ASP.NET WEB API
 
Switch & Routing 2da parte
Switch & Routing 2da parteSwitch & Routing 2da parte
Switch & Routing 2da parte
 
Documentación de Software
Documentación de Software Documentación de Software
Documentación de Software
 
Presentacion herramientas CASE
Presentacion herramientas CASEPresentacion herramientas CASE
Presentacion herramientas CASE
 
Modelado de casos de uso
Modelado de casos de usoModelado de casos de uso
Modelado de casos de uso
 
Diseño a Nivel de Componentes
Diseño a Nivel de ComponentesDiseño a Nivel de Componentes
Diseño a Nivel de Componentes
 
Arquitecturas de software - Parte 1
Arquitecturas de software - Parte 1Arquitecturas de software - Parte 1
Arquitecturas de software - Parte 1
 
Estimacion de costos del Software
Estimacion de costos del SoftwareEstimacion de costos del Software
Estimacion de costos del Software
 
ofimatica: Office word, Power Point, Excel
ofimatica: Office word, Power Point, Excelofimatica: Office word, Power Point, Excel
ofimatica: Office word, Power Point, Excel
 
Diseño de-la-arquitectura-de-software
Diseño de-la-arquitectura-de-softwareDiseño de-la-arquitectura-de-software
Diseño de-la-arquitectura-de-software
 
Nivel de abstraccion
Nivel de abstraccionNivel de abstraccion
Nivel de abstraccion
 
Diseño arquitectónico
Diseño arquitectónicoDiseño arquitectónico
Diseño arquitectónico
 

Viewers also liked

Iv bim. 3er. año geog. - guia nº 4 - áfrica iii - hidrogra
Iv bim. 3er. año   geog. - guia nº 4 - áfrica iii - hidrograIv bim. 3er. año   geog. - guia nº 4 - áfrica iii - hidrogra
Iv bim. 3er. año geog. - guia nº 4 - áfrica iii - hidrogra
NAVICO37
 
Portal ClienteSA - Marcas no Ambiente Digital - out 2013
Portal ClienteSA - Marcas no Ambiente Digital - out 2013Portal ClienteSA - Marcas no Ambiente Digital - out 2013
Portal ClienteSA - Marcas no Ambiente Digital - out 2013
Rodrigo Puga
 
Informe compilado achs implementa clinica vespucio 01 al 06 de julio de 2011
Informe compilado achs implementa clinica vespucio 01 al 06 de julio de 2011Informe compilado achs implementa clinica vespucio 01 al 06 de julio de 2011
Informe compilado achs implementa clinica vespucio 01 al 06 de julio de 2011
implementachile
 
Conclusiones Entrenamiento InnovacióN Y Mejora De Las Operaciones TuríSticas ...
Conclusiones Entrenamiento InnovacióN Y Mejora De Las Operaciones TuríSticas ...Conclusiones Entrenamiento InnovacióN Y Mejora De Las Operaciones TuríSticas ...
Conclusiones Entrenamiento InnovacióN Y Mejora De Las Operaciones TuríSticas ...
RED CIDE Cide
 
Haider Ruf Dezember 2009
Haider Ruf Dezember 2009Haider Ruf Dezember 2009
Haider Ruf Dezember 2009
Sebastian Rappl
 
Presentación1. discapacidad visual.
Presentación1. discapacidad visual.Presentación1. discapacidad visual.
Presentación1. discapacidad visual.
Gerard Casanova
 
Metas inflacion (1)
Metas inflacion (1)Metas inflacion (1)
Metas inflacion (1)
hperhuaman
 

Viewers also liked (20)

The New Photoshop, Part 2: The Revenge of the Web (FEC13)
The New Photoshop, Part 2: The Revenge of the Web (FEC13)The New Photoshop, Part 2: The Revenge of the Web (FEC13)
The New Photoshop, Part 2: The Revenge of the Web (FEC13)
 
Iv bim. 3er. año geog. - guia nº 4 - áfrica iii - hidrogra
Iv bim. 3er. año   geog. - guia nº 4 - áfrica iii - hidrograIv bim. 3er. año   geog. - guia nº 4 - áfrica iii - hidrogra
Iv bim. 3er. año geog. - guia nº 4 - áfrica iii - hidrogra
 
CV_MICHAIL_KONSTANTINOS-tel
CV_MICHAIL_KONSTANTINOS-telCV_MICHAIL_KONSTANTINOS-tel
CV_MICHAIL_KONSTANTINOS-tel
 
Mundial de Uruguay 1930
Mundial de Uruguay 1930Mundial de Uruguay 1930
Mundial de Uruguay 1930
 
Los retablos en sevilla 5
Los retablos en sevilla 5Los retablos en sevilla 5
Los retablos en sevilla 5
 
¿Por qué tu negocio necesita un Sitio Móvil?
¿Por qué tu negocio necesita un Sitio Móvil?¿Por qué tu negocio necesita un Sitio Móvil?
¿Por qué tu negocio necesita un Sitio Móvil?
 
Visual discovery tools
Visual discovery toolsVisual discovery tools
Visual discovery tools
 
Portal ClienteSA - Marcas no Ambiente Digital - out 2013
Portal ClienteSA - Marcas no Ambiente Digital - out 2013Portal ClienteSA - Marcas no Ambiente Digital - out 2013
Portal ClienteSA - Marcas no Ambiente Digital - out 2013
 
DMarx Peace Corps Description of Service
DMarx Peace Corps Description of ServiceDMarx Peace Corps Description of Service
DMarx Peace Corps Description of Service
 
Informe compilado achs implementa clinica vespucio 01 al 06 de julio de 2011
Informe compilado achs implementa clinica vespucio 01 al 06 de julio de 2011Informe compilado achs implementa clinica vespucio 01 al 06 de julio de 2011
Informe compilado achs implementa clinica vespucio 01 al 06 de julio de 2011
 
Boletín 19 maquetación 1
Boletín 19 maquetación 1Boletín 19 maquetación 1
Boletín 19 maquetación 1
 
Conclusiones Entrenamiento InnovacióN Y Mejora De Las Operaciones TuríSticas ...
Conclusiones Entrenamiento InnovacióN Y Mejora De Las Operaciones TuríSticas ...Conclusiones Entrenamiento InnovacióN Y Mejora De Las Operaciones TuríSticas ...
Conclusiones Entrenamiento InnovacióN Y Mejora De Las Operaciones TuríSticas ...
 
DDive - Franziska Tanner client upgrade options
DDive - Franziska Tanner client upgrade optionsDDive - Franziska Tanner client upgrade options
DDive - Franziska Tanner client upgrade options
 
Haider Ruf Dezember 2009
Haider Ruf Dezember 2009Haider Ruf Dezember 2009
Haider Ruf Dezember 2009
 
Presentación1. discapacidad visual.
Presentación1. discapacidad visual.Presentación1. discapacidad visual.
Presentación1. discapacidad visual.
 
Ferias mktng
Ferias mktngFerias mktng
Ferias mktng
 
PresentacióN Libros A La Hoguera Para Slideshare
PresentacióN Libros A La Hoguera Para SlidesharePresentacióN Libros A La Hoguera Para Slideshare
PresentacióN Libros A La Hoguera Para Slideshare
 
Metas inflacion (1)
Metas inflacion (1)Metas inflacion (1)
Metas inflacion (1)
 
My e portfolio Joel Mendoza
My e portfolio Joel MendozaMy e portfolio Joel Mendoza
My e portfolio Joel Mendoza
 
Mini estetica
Mini esteticaMini estetica
Mini estetica
 

Similar to Documento Web2Py

Jsf Java Server Faces
Jsf   Java Server FacesJsf   Java Server Faces
Jsf Java Server Faces
cok12v
 
Kumbia PHP Framework - Inicios, Presente y Futuro
Kumbia PHP Framework - Inicios, Presente y FuturoKumbia PHP Framework - Inicios, Presente y Futuro
Kumbia PHP Framework - Inicios, Presente y Futuro
Deivinson Tejeda
 
9 tecnologías v1.1
9 tecnologías v1.19 tecnologías v1.1
9 tecnologías v1.1
UTN
 
FMK Capa de Presentacion
FMK Capa de PresentacionFMK Capa de Presentacion
FMK Capa de Presentacion
kaolong
 

Similar to Documento Web2Py (20)

Dreamweaver
DreamweaverDreamweaver
Dreamweaver
 
Seminario Spring Roo. Monitorización con Spring Insight
Seminario Spring Roo. Monitorización con Spring InsightSeminario Spring Roo. Monitorización con Spring Insight
Seminario Spring Roo. Monitorización con Spring Insight
 
Tutorial hacer un crud con prado
Tutorial hacer un crud con pradoTutorial hacer un crud con prado
Tutorial hacer un crud con prado
 
Jsf Java Server Faces
Jsf   Java Server FacesJsf   Java Server Faces
Jsf Java Server Faces
 
Framework
FrameworkFramework
Framework
 
Presentación1
Presentación1Presentación1
Presentación1
 
Tecnologías web.pptx
Tecnologías web.pptxTecnologías web.pptx
Tecnologías web.pptx
 
Kumbia PHP Framework - Inicios, Presente y Futuro
Kumbia PHP Framework - Inicios, Presente y FuturoKumbia PHP Framework - Inicios, Presente y Futuro
Kumbia PHP Framework - Inicios, Presente y Futuro
 
Introduccion a ORACLE
Introduccion a ORACLEIntroduccion a ORACLE
Introduccion a ORACLE
 
Presentacion web2py
Presentacion web2pyPresentacion web2py
Presentacion web2py
 
9 tecnologías v1.1
9 tecnologías v1.19 tecnologías v1.1
9 tecnologías v1.1
 
FMK Capa de Presentacion
FMK Capa de PresentacionFMK Capa de Presentacion
FMK Capa de Presentacion
 
Framework
FrameworkFramework
Framework
 
Framework
FrameworkFramework
Framework
 
Frameworks J2EE
Frameworks J2EEFrameworks J2EE
Frameworks J2EE
 
Framework
FrameworkFramework
Framework
 
Framework
FrameworkFramework
Framework
 
Framework
FrameworkFramework
Framework
 
Sercicios web
Sercicios webSercicios web
Sercicios web
 
CakePHP
CakePHPCakePHP
CakePHP
 

Recently uploaded

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
FagnerLisboa3
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 

Recently uploaded (11)

Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 

Documento Web2Py

  • 1. UNIVERSIDAD CENTRAL DEL ECUADOR OPTATIVA 2 FRAMEWORK WEB2PY (PYTHON) JUAN PABLO GUEVARA GORDILLO 01/11/2013
  • 2. 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
  • 3. 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.
  • 4. 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".
  • 5. 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. db=DAL('sqlite://storage.db') 2. db.define_table('image', . 3 4. Field('name', notnull=True), Field('file','upload')) En Controller 1. def índice (): 2. 3. 4. 5. tipo = SQLFORM ( db . imagen .) proceso () si forma . aceptada : la respuesta . Flash = 'Imagen cargada' retorno lugareños () En Vista 1. {{ extender 'layout.html " }} 2. < h1 > Imagen formulario de subida </ h1 > 3. {{= 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.
  • 6. 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'))
  • 7. 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.
  • 8. 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();
  • 9. 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:
  • 10. El flujo de trabajo típico de una petición en web2py se describe en el siguiente diagrama: En el diagrama:
  • 11. 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
  • 12.    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 />
  • 13. {{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 comunicaciones entre un servidor de web y aplicaciones Phyton. A continuación una muestra de la pantalla de la principal interfaz admin de web2py: para
  • 14. 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
  • 15.        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
  • 16. 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:
  • 17. 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.
  • 18. 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
  • 19. Descargar web2py del sitio oficial: www.web2py.com
  • 20. Descarga web2py para el Sistema Operativo de su agrado. Archivo ya descargados: a) phython b) web2py_win.zip Descomprimir el archivo zip de web2py
  • 21. 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.
  • 22. Ejecución de web2py en el navegador por defecto y luego hacer click en Interfaz Administrativa.
  • 23. Página de Administración de Aplicaciones. Pagina para administrar la aplicación seleccionada anteriormente.
  • 24.