Ahora
que hemos configurado las variables de entorno para nuestro
‘‘proyecto’’, estamos listos para comenzar a trabajar.
Cada
aplicación que escribes en Django consiste de un paquete Python,.
Django genera automáticamente la estructura de directorios básica
de una aplicación, de forma que nos podamos enfocar
en escribir código, en vez de estar creando directorios.
■
¿Cuál es la diferencia entre un proyecto y una aplicación?
Una
aplicación es una aplicación web que hace algo -- por ejemplo,
una bitácora, un registro de datos públicos o un sistema de
encuestas. Un proyecto es un conjunto de aplicaciones configuradas
para un sitio web particular. Un proyecto puede contener múltiples
aplicaciones. Una aplicación puede pertenecer a múltiples
proyectos.
En
este tutorial crearemos una aplicación llamada encuestas, en el
mismo directorio donde se encuentra el comando manage.py, así el
archivo pueda ser importado como un módulo python en un nivel
superior o como un sub-módulo de misitio.
Para
crear nuestra aplicación, debemos asegurarnos de estar en el mismo
directorio donde está el archivo manage.py y con el comando
siguiente, crearemos una aplicación llamada encuestas:
$
python manage.py startapp encuestas
Esto
creará un directorio encuestas, con una estructura de archivos como
este:
encuestas/
__init__.py
admin.py
migrations/
__init__.py
models.py
tests.py
views.py
Esta
estructura de directorios contiene la aplicación encuestas. El
primer paso para escribir una base de datos en Django es definir sus
modelos -- esencialmente, un modelo es el diseño de la base de
datos, con los meta datos adicionales.
Filosofía
Un
modelo es la fuente única y definitiva de información de los datos.
Contiene los campos y comportamiento esenciales de los datos que se
están almacenando. Django sigue el Principio DRY (Don’t Repeat
Yourself -- No te repitas). El objetivo es definir el modelo de
datos en un solo lugar y derivar cosas automáticamente a partir de
él.
En
nuestro sistema de encuestas que es la aplicación que acabamos de
crear, crearemos dos modelos: Pregunta y Opción. Pregunta contiene
el texto de una pregunta y una fecha de publicación. Opcion contiene
dos campos: el texto de la opción y un contador de votos. Cada
opción está asociada a una pregunta.
Estos
conceptos son representados por simples clases python. Editamos el
fichero encuestas/models.py para que se parezca a este:
encuestas/models.py
from
django.db import models
class
Pregunta(models.Model):
texto_pregunta = models.CharField(max_length=200)
fecha = models.DateTimeField(‘Fecha de publicación’)
class
Opcion(models.Model):
pregunta = models.ForeignKey(Pregunta)
texto_opcion = models.CharField(max_length=200)
votos = models.IntegerField(default=0)
El
código es sencillo de entender. Cada modelo es representado por una
clase, que a su vez es una subclase de django.db.models.Model. Cada
modelo tiene un número de variables, que representan un campo en la
base de datos del modelo.
Cada
campo está representado por una instancia de una clase llamada Field
– por ejemplo la clase CharField se utiliza para guardar caracteres
y la clase DateTimeField para datos del tipo fecha. Esta es la forma
en que le decimos a Django qué tipo de datos contiene cada campo.
El
nombre de cada instancia de models.Field (por ejemplo pregunta o
fecha) es el nombre del campo, en un formato amigable para la base de
datos. Este valor será usado en el código Python y la base de datos
lo usará como el nombre de la columna correspondiente.
Algunas
clases Field requieren de argumentos obligatorios. Por ejemplo,
CharField requiere que se le pase un atributo max_length. Esto se usa
no sólo en relación al esquema de la base de datos, sino también a
la hora de hacer validaciones, como veremos más adelante.
La
clase Field, posee algunos argumentos opcionales; en este caso hemos
fijado el atributo default a un valor de votos es igual a 0.
Finalmente,
observa que se hemos definido una relación foránea usando una clase
ForeignKey. Esto le informa a Django que cada Opción está
relacionada con una sola Pregunta y una Pregunta puede tener
múltiples opciones. Django soporta todas las relaciones de base de
datos típicas como: muchos a uno, muchos a muchos y uno a uno.
No hay comentarios.:
Publicar un comentario