post thumbnail

Django desde Cero: Modelos y Base de Datos

Publicado Por: Carlos Picca, El 05/07/2013


Detalles del Curso:

Dificultad: Novato

Duración: 25 min


Bienvenidos una vez más a Django desde Cero, curso en el cual aprendemos a programar sin conocimiento alguno. En el capítulo anterior, te enseñe como instalar y configurar Django en un ambiente virtual. Si eres nuevo en este curso, te recomiendo que le eches un vistazo al capítulo anterior para que te pongas en contexto (Capítulo 1)

Hoy, vamos a construir nuestro primer proyecto, un blog!, ya que es una excelente manera de aprender a crear sitios dinámicos con Django.


Construyendo nuestro primer proyecto

Lo primero que necesitamos hacer es decirle a nuestro django-admin.py que nos cree un proyecto en Django. Veamos como:

$ django-admin.py startproject PrimerBlog

Observemos que el único parámetro que necesitamos pasarle es el nombre del proyecto, en este caso PrimerBlog. Ese comando creará una serie de archivos que nos ayudarán a manejar nuestro sitio. Veamos los más importantes:

  • manage.py - no es parte de tu sitio dinámico sino un script que te permitirá ejecutar comandos desde la consola para gestionar el sitio. Ejemplo, sincronizar la base de datos.
  • settings.py - contiene todas las variables de configuración que tu sitio va a necesitar. Django no usa XML en su configuración es puro Python.
  • urls.py - es el archivo que maneja el mapa de las urls de tu sitio. Ejemplo, tusitio.com/nosotros se dirija a la vista de nosotros dentro del proyecto.

Apps

Ninguno de esos archivos hacen un sitio dinámico funcional. Por eso, es que necesitamos crear aplicaciones dentro del proyecto. Esas aplicaciones son las que nos van permitir crear la funcionalidad de nuestro blog, pero antes que veamos la manera de como crear una app, necesitamos entender los principios de diseño de Django.

Primero, Django es un MTV framework, en inglés Model Template View o en español Modelo Vista Plantilla. Posee un enfoque parecido a MVC, o en español Modelo Vista Controlador, pero en general son muy parecidos.

MVC es una arquitectura que provee una manera eficiente de como estructurar nuestros proyectos. Separa el código que es usado para procesar datos del código que maneja la interfaz de usuario.

Segundo, Django posee una filosofía “No repitas lo que ya hiciste”, lo que significa que no debemos escribir código que realice una tarea más de una vez. Por ejemplo, en el blog que vamos a construir, si escribimos un método que seleccione un artículo de la lista de los artículos más leídos, y la implementamos en varias páginas de nuestro blog, no tendríamos que escribirla cada vez que la necesitamos porque ya estaría disponible para nosotros.

¿Qué tiene que ver esto con apps dentro de Django?, Que esas apps funcionan con la misma filosofía. Cada proyecto que queramos crear puede hacer uso de esas apps, es decir, si la funcionalidad que mencionábamos antes estaba dentro de una app y queremos hacer uso de ella en otro proyecto diferente, lo único que tuviéramos que hacer es importar esa app al nuevo proyecto y voilà!, no tendríamos que escribirla de nuevo.

Veamos como creamos una app en la que podamos empezar a escribir las funcionalidades que va a contener nuestro blog:

$ python2.7 mangage.py startapp blog

Como podemos observar, se ha creado una carpeta con el nombre de blog en la cual vamos a generar la funcionalidades del blog. Lo primero que necesitamos es entender como registrar y obtener la información con la cual nuestro sitio se va a nutrir, para eso es necesario echarle un ojo a los modelos.


Modelos

Para poder generar un flujo de datos dentro de nuestra app, lo primero que necesitamos saber es que archivo es el que nos va a permitir acceder a nuestra base de datos. Dicho archivo es models.py.

Si alguna vez trabajaste con PHP, sabrás que para generar la base de datos, teníamos que hacer una serie de actividades tediosas, como crear un script con las estructuras, luego ejecutarlo en motor de la base de datos y así sucesivamente. En Django, es mucho más fácil!

Lo único que tenemos que hacer es definir nuestra estructura de datos dentro de dicho archivo y Django se encargará de generar las estructuras por nosotros. Veamos como:

Dentro de models.py:

from django.db import models
 
class Articulos(models.Model):
    autor = models.CharField(max_length = 30)
    titulo = models.CharField(max_length = 100)
    texto = models.TextField()
    fecha = models.DateTimeField()

Revisemos el código para saber que significa cada instrucción. Lo primero que encontramos es from django.db import models, lo que hace es importar desde las librerías de Django la clase modelo para que así podamos heredar de ella nuestras estructuras de datos. Segundo, class Articulos(models.Model):, genera una clase la cual va actuar como una tabla de base de datos dentro del proyecto. Tercero, tenemos que especificar que atributos son los que queremos guardar, en este caso, tenemos autor el cual va a ser un varchar de 30 caracteres, titulo un varchar de 100 caracteres, texto va a ser un campo de texto y fecha va a ser un campo tipo datetime dentro del la base de datos.

Ahora necesitamos que Django sincronice dichos modelos con la base de datos, pero antes que hagamos eso, debemos especificar en nuestro proyecto cual es la base de datos que vamos a usar. Para eso debemos modificar el archivo settings.py. Veamos como:

La base de datos que vamos a estar usando en nuestro proyecto va a ser MySQL, pero Django soporta varios tipos como por ejemplo Postgres, SqlLite3 y Oracle.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'primer_blog',                      # Or path to database file if using sqlite3.
        'USER': 'root',                      # Not used with sqlite3.
        'PASSWORD': 'root',                  # Not used with sqlite3.
        'HOST': '127.0.0.1',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '8889',                      # Set to empty string for default. Not used with sqlite3.
    }
}

Podemos observar que el engine o motor de base de datos que estoy usando es django.db.backends.mysql ya que como mencioné anteriormente vamos a usar MySql. El nombre de la base de datos va a ser primer_blog, el usuario y la clave de la base de datos va a ser root, respectivamente. El host es la dirección en donde esta ubicada la BD, en este caso, 127.0.0.1 y el puerto va a ser 8889. Cabe destacar que esta configuración se adapta a mis credenciales para acceder a la base de datos que tengo configurada en mi máquina, las tuyas deberían coincidir con tu propia configuración.

Una vez que terminemos de modificar el archivo settings.py, debemos instalar el conector MySQLdb, el cual permitirá que Django (Python) se comunique con MySql sin ningún problema. Veamos como hacerlo:

$ pip install MySQL-python

Lo último que nos queda por hacer, es sincronizar dicha base de datos para que Django generé las tablas por nosotros. Veamos como hacerlo:

$ python2.7 manage.py syncdb

Cada vez que cambies tus modelos, deberás correr este comando para modificar la base de datos. Como es primera vez que ejecutas este comando, Django te preguntará si quieres crear un super-usuario, solo tipea yes y se configurará todo por ti.

Una vez que la sincronización se ejecute, tendremos creada la base de datos que vamos a usar y la conexión entre nuestro proyecto en Django y MySql.


Conclusión

En esta lección, aprendimos como crear un proyecto con Django, como crear modelos de base de datos y como hacer que sincronice y generé las tablas por nosotros. En el próximo capítulo, veremos como crear las vistas con los datos que tenemos guardados en la base de datos. Si tienes alguna pregunta, yo estaré feliz de responderte en los comentarios, además espero que te unas y le eches un vistazo a todo el resto de este curso. Te espero la próxima semana!


¿Te ha gustado esta publicación?

Compártela:

Por Carlos Picca

Conoce más sobre este autor aquí


comments powered by Disqus