Primeros pasos con django

Publicado en Python el 20 de November, 2009 por Fran.

Hace tiempo estuve aprendiendo a programar en Python porque me apeteció y porque me tocó lidiar en el trabajo con una aplicación web, la cual realicé en django.

¿Qué es django?

Django es un entorno de desarrollo (lo que en inglés se denomina framework) para la creación rápida de aplicaciones web, basándose en el MVC (Modelo-Vista-Controlador).

Entre todas las posibilidades que ofrece están que permite trabajar con las bases de datos como si no existieran, la creación de URL bonitas sin tener que tocar nada del servidor web, el uso de plantillas en (X)HTML para la creación de las diferentes páginas, y muchas cosas más, todas ellas estupendas y supongo que todas ellas también las tendrán otros entornos similares que utilicen otros lenguajes de programación.

Iniciando un nuevo proyecto

Lo primero que se debe hacer en django es crear lo que se denomina un proyecto, éste a su vez contendrá aplicaciones que serán las que contengan el código utilizado en la aplicación web. Por poner un ejemplo: el proyecto sería un CMS y las aplicaciones las diferentes funcionalidades de dicho CMS.

Para ello se deberá ejecutar:

$ django-admin.py startproject nombre_del_proyecto

Esto creará un directorio, llamado «nombre_del_proyecto», con los archivos básicos de todo proyecto de django:

  • __init__.py es el archivo de inicialización de cualquier paquete de python.
  • manage.py permitirá la gestión del proyecto de django, como: crear las aplicaciones del proyecto, crear las bases de datos, ejecutar un servidor web para probar el proyecto, …
  • settings.py contiene la configuración del proyecto, básicamente contiene un montón de variables que utilizará django para la configuración.
  • urls.py contiene los patrones de las direcciones de las diferentes vistas del proyecto de django.

Lo malo es que sólo con esto no se va a poder hacer nada más que cambiar unos cuantos valores de la configuración, para que un proyecto haga algo deberá tener al menos una aplicación que contendrá el código necesario.

Iniciando una nueva aplicación

Para crear una aplicación se debe usar el archivo «manage.py» del proyecto del siguiente modo:

$ python manage.py startapp nombre_de_la_aplicación

Esto creará un directorio, llamado «nombre_de_la_aplicación», con los archivos básicos de toda aplicación de django:

  • __init__.py igual que antes, es el archivo de inicialización de cualquier paquete de python.
  • models.py contendrá los modelos de la aplicación, estos modelos son clases de python que se traducirán en tablas en la base de datos.
  • tests.py contendrá tests de la aplicación. Nota: Este archivo sólo se crea a partir de la versión 1.1 de django.
  • views.py contendrá las vistas de la aplicación, estas vistas son funciones de python que realizarán las tareas necesarias para mostrar el resultado como una página web.

Para que esta aplicación esté disponible en el proyecto, hay que añadirla a la lista de aplicaciones del proyecto que está en el archivo «settings.py».

INSTALLED_APPS = (
    'hello_world.hello_app',
)

Nota: Cuando se crea un nuevo proyecto django crea una lista de aplicaciones predeterminada, que en este caso daría lo mismo borrarlas.

Creando un «hola mundo»

Lo primero será crear un proyecto («hello_world») y una aplicación («hello_app») para dicho proyecto, tal y como se ha mencionado antes. Una vez hecho, se deberá crear una vista para la página web.

Creando una vista

Para la creación de una vista, se debe editar el archivo «views.py» de la aplicación creada del siguiente modo:

# views.py
# -*- coding: utf-8 -*-
# Views used in hello world application.

from django.shortcuts import render_to_response

def hello (request):
    """Hello view function."""

    return render_to_response ('hello.htm',
                               { 'hello_msg' : '¡Hola mundo!' })

La función render_to_response usa una plantilla (que ahora se explicará) para crear la página web de la vista.

Creando una plantilla

Django dispone de un lenguaje propio para la creación de plantillas, básicamente son archivos HTML con unas etiquetas especiales, que se marcan con llaves dobles, que django se encargará de rellenar.

De este modo, crear una plantilla es tan sencillo como crear un archivo HTML en un directorio llamado «templates» dentro del directorio del proyecto o de la aplicación. En este caso valdría crear un archivo llamado «hello.htm» (es el que se usa en la función hello) en el directorio «templates» de la aplicación «hello_app».

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>{{ hello_msg }}</title>
</head>

<body>
    <p>{{ hello_msg }}</p>
</body>
</html>

Esta es una plantilla muy sencilla, el lenguaje de las plantillas de django permite realizar muchas más cosas, como herencia entre plantillas, definir bloques, bucles, …

Definiendo una dirección para la vista

Una vez creada la vista y su plantilla, habrá que definir una dirección para poder acceder a la vista. Como se mencionó al principio, para eso está el archivo «urls.py» del proyecto. Este archivo contiene una lista de direcciones a las que se les asignará unas vistas, de modo que cuando se abra esa dirección la vista asignada se encargue de crear su correspondiente página web.

En este caso, el archivo «urls.py» quedaría del siguiente modo:

# urls.py
# -*- coding: utf-8 -*-
# Django URL patterns for hello world project.

from django.conf.urls.defaults import *

urlpatterns = patterns('',
    (r'', 'hello_world.hello_app.views.hello'),
)

Como se puede ver, lo único que se hace es añadir un patrón (una expresión regular) con una vista asociada. En este caso se trata de una dirección vacía (r''), la raíz del dominio, a la que se asocia la función hello que se definió en las vistas de la aplicación.

Probando la aplicación web

Una vez llegado a este punto, ya se puede probar la aplicación web, para ello no hace falta tener ningún servidor web instalado, ya que django dispone de uno para realizar pruebas. Para ejecutarlo, desde el directorio del proyecto:

$ python manage.py runserver

Y aquí concluye esta introducción básica, pero larga, próximamente más. Si os ha gustado y queréis ir aprendiendo por vuestra cuenta, siempre podéis leer la documentación oficial de django.

8 comentarios

  1. [...] 4 bits blog: Primeros pasos con django [...]

    #  Blog Xavier Gavaldà » Shared Items – November 21, 2009 21 de November, 2009

  2. [...] el anterior post de introducción a django, no se usaron bases de datos, así que en este se verá cómo trabaja django con las bases de [...]

    #  Los modelos de django | 4 bits blog 27 de November, 2009

  3. amigo gracias por conpartir tu conocimiento pero ese ejemplo si funciona ????

    Yo estoy intento hacer los mismos pasos que tu y me arroja errores en la plantilla de view falta definir algo ???? por que me serviria mucho tu ayuda ya que me estoy iniciando en django gracias

    #  dante 14 de January, 2010

  4. dante sí, faltaba en la función hello de la vista el parámetro request, ya está corregido.

    Gracias.

    #  Fran 14 de January, 2010

  5. amigo gracias por revisar el comentario, no quiero ser molesto y nada por el estilo pero aun falla ahora sale error en SyntaxError at / (“Non-ASCII character ‘\\xc2′

    estoy siguiendo el ejemplo como lo escribiste y arroja errores aunque el ejemplo que hiciste esta muy bien explicado con lujos de detalles no funciona y la verdad soy nuevo en esto del django y como te dije me seria de gran ayuda tener ejemplos como el tuyo que funcionene ya que aclaran muchas dudas y permiten el aprendizaje de manera rapida y clara

    gracias por tu tiempo y perdona las molestias

    #  dante 15 de January, 2010

  6. el error es el siguiente ViewDoesNotExist at /

    Could not import hello_world.hello_app.views. Error was: No module named hello_world.hello_app.views

    la plantilla hello.htm esta en la carpeta templates dento de hello_app debo registrar la carpeta o moverla o algo asi?????

    gracias

    #  dante 15 de January, 2010

  7. dante el ejemplo lo he probado y funciona, tu error parece ser que no existe el archivo «views.py» o que no está en el sitio adecuado, asegúrate de que el proyecto (y su directorio) se llama «hello_world», la aplicación (y su directorio) se llama «hello_app» y que dentro del directorio de la aplicación está el archivo «views.py». La estructura de directorios sería algo así:

    hello_world/
     + hello_app/
        + templates
           - hello.htm
        - views.py
        - ...
     - urls.py
     - settings.py
     - ...

    #  Fran 15 de January, 2010

  8. amigo muchisimas gracias mi error era en la codificacion en el mensaje hola mundo al utilizar los simbolos de exclamacion.

    Muchas gracias por contestar mis preguntas y espero no haberte causado problemas ni molestias gracias por tu tiempo y ojala publiques mas post relacionados con django

    #  dante 15 de January, 2010

Escribe un comentario