Portal web con Django

Una gran parte de la práctica consiste en el desarrollo de una interfaz web que permita a los usuarios darse de alta y contratar o dar de baja servicios.

Para el desarrollo de esta interfaz hemos utilizado el framework Django. A diferencia de soluciones más elementales basadas en CGIs, PHP o JSP, Django ofrece un gran número de facilidades que permiten desarrollar con mayor rapidez, estabilidad y seguridad, sin por ello sacrificar en flexibilidad.

Django funciona en lenguaje Python.

Nuestra interfaz web requiere una versión de Django >= 1.5, sin embargo Debian 6 está estancado en la versión 1.2.3 de Django. Para poder utilizar versiones recientes de Django y otras bibliotecas de Python utilizaremos virtualenv.

virtualenv es un envoltorio que te permite tener en un directorio, como usuario normal, un intérprete de Python independiente del que viene con el sistema, una ruta donde instalar paquetes de Python localmente y un gestor de paquetes (pip) configurado para trabajar en esta ruta.

Creación de un usuario y instalación de virtualenv

Primero hay que instalar una serie de dependencias. Aquellas en las que nos valen versiones viejas las instalamos a través de aptitude. El resto las instalaremos a través de virtualenv.

  • git, necesario para el control de versiones.
  • python, el interprete del lenguaje.
  • python-mysqldb, el conector de MySQL.
  • python-virtualenv.

Creo un usuario llamado cactus-web con directorio personal /home/cactus-web. Será quien ejecute el servidor Django.

useradd -s /bin/zsh -m cactus-web

Me impersono como este nuevo usuario y en su directorio personal procedo a crear un entorno virtualenv.

su - cactus-web
virtualenv ~/env

Nota

En la versión (vieja) de virtualenv que trae Debian 6, por defecto los entornos virtuales pueden acceder a los paquetes de Python instalados en el sistema (en nuestro caso, python-mysqldb).

En las versiones recientes de virtualenv esto ha cambiado y ahora hay que añadir un parámetro para obtener este comportamiento.

virtualenv --system-site-packages ~/env

Activo el entorno virtual recién creado.

source ~/env/bin/activate

Un indicador debería aparecer a la izquierda del prompt confirmándolo.

../_images/venv-indicator.png

Consejo

Para evitar tener que activar el virtualenv cada vez que queramos trabajar con cactus-web se puede añadir la línea anterior a ~/.zshrc (o el archivo que corresponda en la shell que estemos usando).

Clonado del repositorio

Para el desarrollo y control de versiones de la interfaz web de Cactus utilizamos un repositorio git alojado en Bitbucket.

Creamos una clave SSH para el usuario cactus-web.

ssh-keygen -t rsa

Copiamos el contenido de la clave pública, /home/cactus-web/.ssh/id_rsa.pub y la asignamos como clave de despliegue del proyecto en la interfaz de Bitbucket. Esto significa que cactus-web podrá descargarse el proyecto y actualizarlo, mas no podrá enviar cambios.

../_images/deployment-keys.png

Clonamos el repositorio.

git clone git@bitbucket.org:rufian/cactus_proj.git cactus_proj

Entramos en el directorio del repositorio y instalamos ahora las dependencias.

cd ~/cactus_proj
pip install -r requirements.txt

Configuración de la base de datos

A continuación hay que configurar la base de datos de Cactus:

vim ~/cactus_proj/cactus_proj/database_config.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'cactus',
        'USER': 'cactus-web',
        'PASSWORD': 'DRD1hN4MlmloG',
        'HOST': '',
        'PORT': '',
    }
}

Prueba

Se puede ejecutar el servidor de prueba con la siguiente orden:

cd ~/cactus_proj
python manage.py runserver 0.0.0.0:8000

Esto habilitará un servidor de prueba en http://cactus.rufian.eu:8000/.

Una vez probado que funciona, es momento de configurar Apache para poner la aplicación Django realmente en producción (runserver sólo debería ser usado para desarrollo).

Contenidos

Tema anterior

Servidor web Apache

Próximo tema

Gestión de usuarios

Esta página