¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí

Crear una aplicación web en 30 minutos

Descripción de la aplicación que se va a construir

Vamos a construir una aplicación en varias partes. El objetivo consiste en mostrar cómo una aplicación puede tener una interfaz web, una interfaz gráfica y una interfaz de consola y, además, compartir los datos.

La aplicación, en su globalidad, es un simple formulario de contacto.

La solución web que vamos a utilizar es Pyramid, un framework web que utiliza distintos módulos de Python bien contrastados y sobre los que se basa para ofrecer una solución fiable, pero flexible, pues en todo momento es posible remplazar alguno de los módulos por otro (por ejemplo, cambiar el módulo que gestiona el templating, o el que gestiona la autenticación, o incluso el que gestiona el enrutado...). El desacople de estos módulos es una de las ventajas de este framework.

La solución para gestionar la persistencia que vamos a utilizar es PostgreSQL.

Cabe destacar que la primera edición de este libro utilizaba TurboGears. Esta solución sigue siendo excelente e implementa varios componentes similares a Pyramid así como muchos otros bastante específicos e interesantes, pero se parece más a un framework como Django.

Este último es un framework full-stack, es decir, que integra en su seno todos los componentes elementales (ya no es necesario utilizar proyectos complementarios para realizar las tareas...

Implementación

1. Aislar el entorno

Cuando se crea un proyecto, conviene crear una carpeta que contendrá Python (si es preciso con una versión concreta, correspondiente a la versión de producción o de la futura producción), así como todas sus dependencias.

De este modo, se minimiza la probabilidad de sufrir una anomalía en la producción que no sea reproducible en un entorno local.

He aquí cómo crear dicho entorno:

$ virtualenv- -p python3 nombre_entorno 
$ cd nombre_entorno/ 

En esta carpeta se desarrollará el proyecto.

A continuación, es necesario habilitar este entorno. En Linux:

$ source bin/activate 

En Windows:

Scripts\activate.bat 

Una vez activado el entorno, la instalación de un módulo de Python agrega este módulo al Python local, no al Python de la máquina. Y de manera recíproca, algunos módulos instalados en la máquina pueden no estar disponibles y habría que reinstalarlos (con pip_install) o puede que no estén en la versión correcta (habría que actualizarlos con pip_install -U).

Cuando se cierra el terminal, el entorno se desactiva; en caso contrario, la creación de este entorno agregaría también el comando deactivate, que basta para volver a un terminal normal.

2. Creación del proyecto

La primera etapa consiste en instalar Pyramid, con easy_install, una vez dentro...

Realizar la aplicación

A continuación, pasamos a realizar la aplicación. Para ello, vamos a empezar presentando los modelos en su integridad y, a continuación, las vistas para mostrar cómo se organizan y muestran los datos; por último veremos los controladores para manipularlos y vincular las vistas al modelo.

1. Modelos

Esta sección es particular, pues este modelo sirve también como base a los proyectos detallados en los siguientes capítulos. Vamos a escribir el modelo en un archivo «model.py» situado en la carpeta contact.

Contiene:

# -*- coding: utf-8 -*-  
  
from datetime import datetime   
  
from sqlalchemy import ( 
    Column,   
    ForeignKey, 
    Index,   
    Integer,  
    UnicodeText,   
    Unicode,   
    DateTime, 
    )   
  
  
from sqlalchemy.ext.declarative import declarative_base 
  
from sqlalchemy.orm import ( 
    scoped_session,   
    sessionmaker,   
    )   
  
from zope.sqlalchemy import ZopeTransactionExtension 
  
DBSession = scoped_session(sessionmaker 
(extension=ZopeTransactionExtension()))   
Base = declarative_base()   
  
__all__ = ['Subject', 'Contact']    
 
  class Subject(Base):   
    __tablename__ = 'subjects'   
    id = Column(Integer, primary_key=True)   
    name = Column(Unicode(255), unique=True)  
  
Index('subject_name_index', Subject.name, unique=True, 
mysql_length=255) 
  
class Contact(Base):   
    __tablename__ = 'contacts'  
    id = Column(Integer, primary_key=True)   
    email = Column(Unicode(255), nullable=False)   
    subject_id = Column(Integer, ForeignKey(Subject.id))   
    text = Column(UnicodeText, nullable=False)...

Para ir más allá

Se han presentado aquí los fundamentos que permiten crear un sitio web a partir de un framework minimalista en Python 3. Haría falta un libro entero dedicado a este tema, pues las competencias necesarias son enormes: Pyramid permite hacer muchas más cosas que las que se han presentado aquí y requiere una verdadera inversión de tiempo, sin hablar de las tecnologías HTML, CSS, JavaScript, asociadas a perfiles de diseñadores gráficos y de ergonomía.

Esta presentación puede, también, completarse con otros temas potencialmente complejos como, por ejemplo, la gestión correcta de los usuarios y de los grupos, la autenticación mediante LDAP, los grupos LDAP, la gestión de openID, el uso de varias bases de datos o la implementación de herramientas de profiling.

Por último, para finalizar, cuando se pone en producción una aplicación de estas características, conviene utilizar un servidor como Apache, Gunicorn, Tornado o NGINX y, por tanto, WSGI. Esto se lleva a cabo muy rápidamente y de manera sencilla; gracias a los hosts virtuales es posible integrar esta aplicación en un pool de aplicaciones que se ejecuten en un mismo servidor.

Cabe tener en cuenta que Pyramid no es la única solución y que para realizar ciertas funcionalidades es necesario invocar a otros módulos Python, no todos ellos...