jueves, 6 de mayo de 2010

Nota Django. Intro I. Hello world!!

Intro


Django es un framework de desarrollo web de código abierto, escrito en Python, que cumple en cierta medida el paradigma del Modelo Vista Controlador. http://es.wikipedia.org/wiki/Django

Voy a hacer un pequeño ejemplo en django. No es una explicación muy detallada del funcionamiento de django, sino más bien un “hello world!” un poco más desarrollado.
Doy por hecho unos conocimientos mínimos de python y estar familirizado con lo que es django.
Si no es así recomiendo echar primero un vistazo a la documentación.
Django a primera vista. (Django at a glance) http://docs.djangoproject.com/en/dev/intro/overview/

Estoy aprendiendo a usar django y por lo tanto puede que haya algún error. Si ves algo que crees que no es correcto, por favor déjame un comentario.

Para hecer este ejemplo he usado las siguientes referencias.

El libro de django:
http://www.djangobook.com
concretamente la traducción que hay en la siguiente página http://trac.usla.org.ar/django-book


Escribiendo tu primer app django (Writing your first Django app)
http://docs.djangoproject.com/en/dev/intro/tutorial01/
http://docs.djangoproject.com/en/dev/intro/tutorial02/
http://docs.djangoproject.com/en/dev/intro/tutorial03/
http://docs.djangoproject.com/en/dev/intro/tutorial04/

screencast de la creación de una wiki en django
http://pablogplanet.blogspot.com/2010/05/nota-django-screencast-crear-una-wiki.html


He hecho este ejemplo en ubuntu 10.04 Lucid Lynx.

Lo primero que hay que hacer es comprobar que está instalado django. Doy por por hecho que python ya está instalado. La manera mas sencilla para comprobar si está instaldo django es mediante el interprete de comandos de python. Hay que abrir un terminal y entrar en el interprete de python. Un a vez dentro del interprete de comandos tecleamos lo siguiente:

import django

Si no hay ningún error, django está instaldo correctamente. Si no se tiene instalado se puede instalar directamente de los repositorios con el siguiente comando:

sudo apt-get install python-django


Crear el proyecto.

Para crear un proyecto hay ejecutar desde el dierectorio donde se quiere crear el proyecto:

django-admin.py startproject helloweb

Al ejecutar el comando anterior se crea un directorio helloweb.

El archivo django-admin.py debe estar en el path, si no es así se debe añadir. En mi ordenador se encuentra en: “/usr/lib/python-django/bin”


Una vez ejecutado el comando anterior, comprobar que se han creado correctamente los siguientes archivos:

helloweb/

  • __init__.py
  • manage.py
  • settings.py
  • urls.py



__init__.py: Indica que el directorio es un módulo de python (http://docs.python.org/tutorial/modules.html#packages)

manage.py Permite interactuar con el proyecto. Más información (http://docs.djangoproject.com/en/dev/ref/django-admin/#ref-django-admin)

settings.py: Configuración del proyecto (http://docs.djangoproject.com/en/dev/topics/settings/#topics-settings)

urls.py: Declaración de urls para el proyecto (http://docs.djangoproject.com/en/dev/topics/http/urls/#topics-http-urls)


Servidor web de pruebas

Para comprobar el funcionamiento de nuestro proyecto, django proporciona un pequeño servidor. Este servidor sólo se debe usar para pruebas y nunca como servidor comercial.

Para iniciar el servidor ejecutar el siguiente comando desde el directorio helloweb:

python manage.py runserver

Si todo ha funcionado correctamente, se debería ver el siguiente mensaje:



Validating models...
0 errors found.

Django version 1.0, using settings 'mysite.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.


Para comprobar que el servidor fuciona correctamente ir a la siguiente dirección:

http://127.0.0.1:8000/


Salir de la aplicación del servidor de pruebas.


Configuración de la base de datos.

Para este ejemplo se va a usar la base de datos sqlite. Las base de datos sqlite, es una base de datos muy simple que nos permite probar este ejemplo sin la necesidad de instalar nada mas. Al usar esta base de datos, se creará un fichero que contendrá toda la información.

http://pablogplanet.blogspot.com/2010/04/base-de-datos-sqlite-y-gestor-sqlite.html


Hay que editar el fichero helloweb/settings.py y configurar la base de datos que va a usar nuestro proyecto. En nuestro caso vamos a usar una BD SQLite

Abrir el fichero con el editor que estés más cómodo. Yo uso habitualmente el editor vi. Cuando en este ejemplo pongo que se edite un archivo pondré vi y el nombre del archivo, como a continuación:

vi settings.py

Rellenar los siguientes datos relacionados con la base de datos:

DATABASE_ENGINE = 'sqlite3'           # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. 
DATABASE_NAME = 'helloweb.sqlite'             # Or path to database file if using sqlite3. 
DATABASE_USER = ''             # Not used with sqlite3. 
DATABASE_PASSWORD = ''         # Not used with sqlite3. 
DATABASE_HOST = ''             # Set to empty string for localhost. Not used with sqlite3. 
DATABASE_PORT = ''             # Set to empty string for default. Not used with sqlite3. 

Al indicar DATABASE_NAME = 'helloweb.sqlite', se creará el fichero 'helloweb.sqlite' en el directorio del proyecto. Este fichero se puede visualizar con sqlitemanager.

Crear un módelo

Para crear una app nueva.

python manage.py startapp textapp

Al crear esta app se crea un directorio con el mismo nombre. Dentro de este direcctorio se habrá creado un fichero llamado models.py (helloweb/textapp/models.py) que es donde vamos a crear nuestro modelo.

vi models.py

Copiamos el siguiente modelo:


from django.db import models

# Create your models here.

class Textmodel(models.Model):
    content = models.CharField(max_length=20)

Sincronizar la Base de Datos

Ahora hay que sincronizar la base de datos. Para que sincronice correctamente, el primer paso que hay que hacer el añadir la app que acabamos de crear. Abrimos helloweb/settings.py

vi settings.py

Vamos a la parte final del archivo donde está INSTALLED_APPS. Borramos 'django.contrib.auth' ya que no se va a usar en este ejemplo. Además añadimos nuestra app.


INSTALLED_APPS = (
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'helloweb.textapp'
)

A continuación sincronizamos la Base de Datos.

python manage.py syncdb

Al realizar este proceso se habrá creado el fichero de la Base de Datos (helloweb/helloweb.sqlite). Si se quiere se puede visualizar este fichero en sqlitemanager y comprobar que se han creado las tablas correspondientes.


Usando los modelos desde la consola

Ahora vamos a ver como se puede hacer uso de los modelos en django. Esto nos permite interactuar con la base de datos de una manera muy sencilla. Para abrir la consola interprete de comandos ejecutamos es siguiente comando:

python manage.py shell

Al ejecutar este comando ya hemos entrado en la consola y ha añadido al path nuestro poryecto. Ahora vamos a ver como se pueden usar los modelos.

In [1]: from helloweb.textapp.models import Textmodel

In [2]: t = Textmodel()

In [3]: t.content = 'Hello world'

In [4]: print t.content
Hello world

In [5]: t.save()
Salimos del interprete. ctrl+d. Si volvemos a abrir la base de datos con sqlitemanager, podemos comprobar que se ha creado un nuevo registro en la tabla “textapp_textmodel” con el texto que hemos introducido en el interprete de comando. Ahora volvemos a abrir el interprete de comandos:

python manage.py shell

Vamos a leer un objeto del modelo. Usamos la clave primaria para obtenerlo.

In [1]: from helloweb.textapp.models import Textmodel

In [2]: t = Textmodel.objects.get(pk=1)

In [3]: print t.content
Hello world

Como podemos observar estos datos están almacenados en la BD por lo que aunque se cierre el interprete, estos datos están disponibles.

Si ahora imprimimos el objeto “t” obtenemos lo siguiente:

In [4]: print t
Textmodel object
Si queremos que nos de un resultado más inteligible, hay que añadir la función __unicode__ al modelo. Cerramos el interprete de comando y abrimos helloweb/textapp/models.py


vi models.py
Lo editamos para que quede de la siguiente manera:

from django.db import models

# Create your models here.

class Textmodel(models.Model):
    content = models.CharField(max_length=20)

    def __unicode__(self):
        return 'content:"%s"' % self.content

Mapeando URLs a Vistas

Ahora vamos a añadir una vista y modificar urls.py a para poder crear la página hello world.

Estos dos pasos se pueden hacer en orden invertido pero para que funcione correctamente se necesita que los dos se hayan ejecutado de forma correcta.

Vamos a editar el fichero helloweb/textapp/views.py y vamos a añadir la función “say_hello”.

vi views.py

Lo editamos.

# Create your views here.
from helloweb.textapp.models import Textmodel
from django.http import HttpResponse

def say_hello(request):
    text = Textmodel.objects.get(pk = 1)
    html = "%s" % text.content
    return HttpResponse(html)

Hemos añadido la fución e importado los módulos necesarios. Esta función lee un módelo y genera como salida una página html. No es un ejemplo muy útil ya que la forma de leer el objeto es mediante un número literal. En lo único que hay que fijarse en este ejemplo es que desde las vistas tenemos acceso a los modelos.


Ahora vamos a editar helloweb/urls.py

vi urls.py

Vamos a añdir una nueva tupla a urlpatterns.

from django.conf.urls.defaults import *
from helloweb.textapp.views import say_hello

# Uncomment the next two lines to enable the admin:
# from django.contrib import admin
# admin.autodiscover()

urlpatterns = patterns('',
    # (r'^admin/', include(admin.site.urls)),
    (r'^hello/$', say_hello)
)

Esta tupla lo que indica es que cuando se ponga la dirección hello/ en el explorador, se va a ejecutar la función say_hello de la vista.

Para comprobar su funcionamiento es necesario que el servidor se esté ejecutando.

python manage.py runserver

A continuación se pone la siguiente dirección en el explorador:

http://127.0.0.1:8000/hello/

Si todo ha salido correctamente, debería aparecer una página con el texto "Hello world".

Si se desea modificar algún fichero de los anteriores, no es necesario reiniciar el servidor, ya que este reconoce los cambios y los actualiza automáticamente.

No hay comentarios:

Publicar un comentario