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__.pyes el archivo de inicialización de cualquier paquete de python.manage.pypermitirá 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.pycontiene la configuración del proyecto, básicamente contiene un montón de variables que utilizará django para la configuración.urls.pycontiene 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__.pyigual que antes, es el archivo de inicialización de cualquier paquete de python.models.pycontendrá los modelos de la aplicación, estos modelos son clases de python que se traducirán en tablas en la base de datos.tests.pycontendrá tests de la aplicación. Nota: Este archivo sólo se crea a partir de la versión 1.1 de django.views.pycontendrá 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.
[...] 4 bits blog: Primeros pasos con django [...]
# Blog Xavier Gavaldà » Shared Items – November 21, 2009 21 de November, 2009
[...] 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
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
dante sí, faltaba en la función
hellode la vista el parámetrorequest, ya está corregido.Gracias.
# Fran 14 de January, 2010
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
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
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
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
Aquí tengo un ejemplito de uso y creación de filtros para las platillas de django
http://www.ikeralbeniz.net/2010/03/11/usarcrear-filtros-para-las-plantillas-de-djangogoogle-app-engine/
# iker 11 de March, 2010