Gracias a @Jneight por actualizar este artículo!

Hacía tiempo que el framework web Django estaba en mi lista de cosas a las que echar un vistazo. Por fin he podido sacar un hueco para instalarlo y trastearlo un poquito. Hoy comparto con vosotros lo que he aprendido mediante una pequeña introducción en la que veremos cómo instalar django bajo un entorno virtual para no ensuciar demasiado el sistema, y una pequeña aplicación sacada de la documentación oficial de Django.

Índice

Instalar django bajo un entorno virtual con virtualenv

Django desde la version 1.8 (LTS) solo soporta python 2.7 o 3.x (recomendado). En este tutorial se usará la version estable 1.10.2.

Usando python 2.7

Vamos a instalar virtualenv, lo cual nos permitirá crear un entorno virtual en el que trabajar con python e instalar fácilmente aplicaciones mediante pip, que ya viene incluido en python 2.7.9, en caso de tener otra version anterior, deberemos instalarlo.



$ sudo apt-get install python-pip python-dev build-essential

Tras esto, ahora podremos instalar virtualenv:

$ sudo pip install --upgrade virtualenv

Usando python 3.x

En caso de usar la version 3.4 o superior, ya tendremos disponible pip por lo que no será necesario su instalación. En otro caso, procederemos a instalar pip.

$ sudo apt-get install python3-pip python3-dev build-essential

Ahora podremos instalar virtualenv:

$ sudo pip3 install --upgrade virtualenv

Inicializar el entorno virtual

Con virtualenv instalado ahora creamos un entorno virtual (lo llamaremos python-env) en el que instalar todo lo relacionado con Django y sus dependencias:

$ virtualenv python-env

Al ejecutar este comando tendremos una carpeta llamada python-env, ahora activaremos el entorno virtual:

$ source python-env/bin/activate

Instalar Django

Por último, instalamos Django:

$ pip install --upgrade django

Configurando Django

Asumiremos que la versión instalada es la 1.10:

$ python -m django --version
1.10.2

Crear un proyecto

Para inicializar un proyecto debemos ejecutar el siguiente comando:

$ django-admin.py startproject mysite

El cual creará un directorio llamado mysite, la estructura del proyecto es la siguiente:

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        wsgi.py

El servidor de desarrollo

Django proporciona un servidor simple que nos permita probar nuestro proyecto de forma local, para iniciarlo hay que ejecutar:

$ python manage.py runserver

El fichero de configuración settings.py

Configurar la base de datos

Para modificar la configuración de la base de datos editamos el fichero mysite/settings.py, en este tutorial usaremos sqlite por ser la más sencilla.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3')  # Or path to database file if using sqlite3.
        # The following settings are not used with sqlite3:
        'USER': '',
        'PASSWORD': '',
        'HOST': '',                      # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
        'PORT': '',                      # Set to empty string for default.
    }
}
Aplicaciones instaladas

En INSTALLED_APPS se definen las aplicaciones instaladas en nuestro proyecto, por defecto tendremos:

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
)

La aplicación de ejemplo que creemos deberá referenciarse aquí para poder usarla.

Una vez tengamos configurado esto, procedemos a iniciar la base de datos:

$ python manage.py migrate

Crear una aplicación

Para crear una nueva aplicación basta con ejecutar el comando:

$ python manage.py startapp polls

Lo cual creará un directorio llamado polls, cuyo contenido será:

polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    urls.py
    views.py

Primero necesitaremos modificar settings.py para añadir la nueva aplicación a la lista de INSTALLED_APPS y que django la inicie en cada arranque:

INSTALLED_APPS = [
    'polls.apps.PollsConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

En models.py se define los modelos que se usarán para crear la base de datos mediante clases en Python. En este caso necesitamos una tabla Poll (Encuesta) y Choice (Opción elegida). La encuesta tendrá dos campos, question y pub_date. Mientras que la opción elegida tendrá que hacer referencia a qué encuesta pertenece mediante una foreignKey, un texto que describa la opción y el número de votos. Dicho esto, el fichero models.py contendrá:

from django.db import models

class Poll(models.Model):
    question = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

class Choice(models.Model):
    poll = models.ForeignKey(Poll)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

Tras escribir los modelos que necesitamos, deberemos crear la migración correspondiente para posteriormente crear las nuevas tablas:

$ python manage.py makemigrations pools
$ python manage.py migrate

Activar el panel de administración

Primero deberemos crear un usuario con permiso de administración, esto es posible directamente con un comando de manage.py en el que solo debemos seguir los pasos:

$ python manage.py createsuperuser

Para poder acceder al panel de administración, debe estar añadido en la lista de urls, para ello comprobamos que mysite/urls.py define este urlpatterns

from django.conf.urls import url
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
]

Ejecutamos el servidor con python manage.py runserver y entramos a http://127.0.0.1:8000/admin/. Deberíamos ver:

Para poder hacer accesibles los modelos que acabamos de crear desde el panel de administración, debemos configurar django para que los objetos Polls tengan una interfaz en el panel de administración. Para ello, crea un archivo llamado admin.py en el directorio polls:

from django.contrib import admin
from .models import Poll

admin.site.register(Poll)

Debemos reiniciar el servidor para que los cambios se apliquen, ahora sí vemos la aplicación polls:

Escribir la primera vista

Hemos mencionado antes que en views.py se define qué se va a mostrar al usuario. Veamos la vista más simple que podemos crear. En polls/views.py escribe lo siguiente:

from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello, world. You're at the poll index.")

Sin embargo, para conseguir que funcione, debemos crear un archivo urls.py que asocie la función index a una dirección URL. En polls/urls.py escribe:

from django.conf.urls import url

from . import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
]

Y ahora debemos decir a mysite/urls.py que use también polls/urls.py cuando busque qué funciones asociar a qué urls:

from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
    url(r'^polls/', include('polls.urls')),
    url(r'^admin/', admin.site.urls),
]

Tras modificar estos ficheros, veremos el mensaje Hello, world. You’re at the poll index. en http://127.0.0.1:8000/polls.

Ejemplo completo

Para no alargar mucho este artículo, he intentado dar unas nociones básicas de cómo instalar y empezar a usar django. El ejemplo completo de la documentación oficial citada en las referencias lo podéis encontrar en github.

Referencias

Documentación Oficial »» djangoproject.com Imagen de aruseni »» deviantart