lunes, 31 de marzo de 2014

TU PRIMER PROYECTO DJANGO - PARTE 2

Después de haber instalado y configurado Django en el Post anterior Ver publicacion, vamos a comenzar a crear nuestro primer Proyecto Django.

Un proyecto Django es un paquete de archivos con lineas de código python que se generan automáticamente al ejecutar un comando python en el cmd. También podemos decir que es la organización de archivos en primera instancia de tu aplicación. 

Lo que haremos es este Post es:
  • Crear un proyecto Django
  • Configurar la conexión de Django a MySQL en el archivo settings.py
  • Iniciar o correr nuestro servidor
  • Crear directorios Django
  • Escribir nuestro modelo que es en esencia nuestra BD (models.py).
  • Generar la Base de Datos a partir del modelo (models.py)
  • Usar el administrador de Django para insertar, modificar o eliminar datos en nuestra BD generada.
  1. Crear un proyecto Django
  2. Abrimos el CMD y ubicamos la ruta donde deseamos crear nuestro proyecto con el comando cd ó cd..(En mi caso he creado una carpeta en el disco G:\ llamada proyecto) y ejecutamos el comando.

    django-admin.py startproject aplicacion


    Esto creará el directorio siguiente:

      aplicacion/
          __init__.py
          settings.py
          urls.py
          wsgi.py

  3. Configurar la conexión de Django a MySQL en el archivo settings.py
  4. Abrimos el archivo settings.py y lo editamos:
      ADMINS = (
           ('Jhony Omar', 'jpariahuache@gmail.com'),
      )
    Luego configuramos la conexión a nuestra Base de Datos:
      DATABASES = {
          'default': {
              'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
              'NAME': 'mybase',         # Or path to database file if using sqlite3.
              'USER': 'root',                # Not used with sqlite3.
              'PASSWORD': '',           # Not used with sqlite3.
              'HOST': 'localhost',         # Set to empty string for localhost. Not used with sqlite3.
              'PORT': '3306',               # Set to empty string for default. Not used with sqlite3.
          }
      }
    Podemos cambiar la zona horaria:
             TIME_ZONE = 'America/Lima' 
    Podemos cambiar el idioma:
             LANGUAGE_CODE = 'es-PE' 

    NOTA: Hay mas configuraciones, como habilitar las APPs instaladas, definir la ruta de la URL, etc, pero la veremos conforme lo vayamos requiriendo.

  5. Iniciar o correr nuestro servidor
  6. Luego de configurar el archivo settings.py ponemos a correr nuestro servidor con el comando:

      python manage.py runserver

    Luego vamos a nuestro navegador y escribimos: 
      http://localhost:8000/ y nos debe de salir esto
    Con esto ya tenemos nuestro servidor Django conrriendo.
    Por defecto el servidor se inicia con el puerto 8000, si deseamos iniciar en otro puerto hacemos:
      python manage.py runserver localhost:8002( por ejemplo)

    NOTA: Para detener el servicio Django del servidor presionas Ctrl+C en el cmd.

  7. Crear directorios Django
    En este tutorial crearemos una APP llamada ventas dentro del directorio aplicación. Como consecuencia de esto, la APP estará acoplada con el proyecto, osea, python accederá a la APP ventas, "aplicacion.ventas".

    Para crear la APP escribimos el comando:
  8.            python manage.py startapp venta
    Esto creará un directorio venta ubicado dentro del proyecto aplicacion con la estructura:
      venta/
          __init__.py
          models.py
          tests.py
          views.py

    Esta estructura de directorios contendrá la aplicación de venta y es aquí donde comenzaremos a trabajar.


  9. Escribir nuestro modelo que es en esencia nuestra BD (models.py).
    Para escribir nuestro modelo, nos guiaremos del siguiente modelo E-R

  10. Bien,abrimos el archivo proyecto\aplicacion\venta\models.py y escribiremos:
    Antes importamos los modelos y formularios de Django:
        # -*- coding: utf8 -*-
        from django.db import models
        from django.forms import ModelForm

        #PARA EL MODELO MARCA
        class Marca(models.Model):
        descripcion = models.CharField(max_length=30)
        def __unicode__(self):
        return '%s' %(self.descripcion)

        #PARA EL MODELO COMPROBANTE
        class Comprobante(models.Model):
        descripcion = models.CharField(max_length=30)
        correlativo = models.IntegerField()
        serie = models.CharField(max_length=3)
        def __unicode__(self):
        return '%s' %(self.descripcion)

        #PARA EL MODELO CLIENTE
        class Cliente(models.Model):
        nombres = models.CharField(max_length=30)
        apellidos = models.CharField(max_length=30)
        doc_indentidad = models.CharField(max_length=11)
        def __unicode__(self):
        return '%s' %(self.nombres+' '+self.apellidos)

        #PARA EL MODELO PRODUCTO
        class Producto(models.Model):
        marca = models.ForeignKey(Marca, on_delete=models.PROTECT)
        descripcion = models.CharField(max_length=50)
        modelo = models.CharField(max_length=30)
        precio = models.DecimalField(max_digits=18, decimal_places=2)
        def __unicode__(self):
        return '%s' %(self.descripcion+' '+self.modelo)

        #PARA EL MODELO VENTA
        class Venta(models.Model):
        cliente = models.ForeignKey(Cliente, on_delete=models.PROTECT)
        comprobante = models.ForeignKey(Comprobante, on_delete=models.PROTECT)
        nro_comprobante = models.IntegerField()
        fecha = models.DateField()
        total = models.DecimalField(max_digits=18, decimal_places=2)
        detalle_venta = models.ManyToManyField(
        Producto, through='Detalle_venta', null=True, blank=True)
        def __unicode__(self):
        return '%s' %(self.comprobante+' '+self.nro_comprobante+' '+self.cliente)

        #PARA EL MODELO DETALLE
        class Detalle_venta(models.Model):
        producto = models.ForeignKey(Producto, on_delete=models.PROTECT, related_name='fk_detalleventa_producto')
        venta = models.ForeignKey(Venta, on_delete=models.PROTECT, related_name='fk_detalleventa_venta')
        cantidad = models.IntegerField()
        precio = models.DecimalField(max_digits=18, decimal_places=2)   
        def __unicode__(self):
        return '%s %s' %(self.producto, self.venta)


  11. Generar la Base de Datos a partir del modelo (models.py)
  12. Creamos manualmente nuestra BD mybase. Luego:
    Abrimos el archivo settings.py y agregamos las APPS; de Django  y  nuestra APP venta:
        INSTALLED_APPS = (
            'django.contrib.auth',
            #python social auth
            'django.contrib.contenttypes',
            'django.contrib.sessions',
            'django.contrib.sites',
            'django.contrib.messages',
            'django.contrib.staticfiles',
            'django.contrib.admin',
            'django.contrib.admindocs',
            'debug_toolbar',
            'django_extensions',
            'sorl.thumbnail',
            'registration',
            'venta',
            # Uncomment the next line to enable the admin:
            # 'django.contrib.admin',
            # Uncomment the next line to enable admin documentation:
            # 'django.contrib.admindocs',
        )

    Ahora abrimos el CMD y ubicamos la ruta donde se encuentra nuestro proyecto aplicacion y ejecutamos el comando para crear nuestra base de datos a partir del modelo anteriormente:
        python manage,py syncdb




    Podemos crear nuestro super usuario para la administración de django


    Listo!!!. Esto habrá creado nuestra base de datos con sus tablas respectivas y otras tablas que Django necesita.
    NOTA. Las tablas se crearán así: NOMBRE_DEL_APP.tabla, esto para referenciar a que APP pertenece.
    7. Usar el administrador de Django para insertar, modificar o eliminar datos en nuestra BD generada.
    El administrador de Django es un motor muy potente que trabaja con los meta-datos de los modelos para generar una interfaz de administración. Para poder habilitar esta opción se tenemos que configurar 2 cosas:
  • Crear un archivo admin.py dentro de la APP venta y registrar todos los modelos:
      #encoding:utf-8
      from django.contrib import admin
      from venta.models import *

      admin.site.register(Marca)
      admin.site.register(Comprobante)
      admin.site.register(Cliente)
      admin.site.register(Producto)
      admin.site.register(Venta)
      admin.site.register(Detalle_venta)
  • Registrar las URLs admin en el archivo urls.py ubicado dentro de Aplicacion:
      from django.conf.urls import patterns, include, url
      from django.contrib import admin
      admin.autodiscover()

      urlpatterns = patterns('',
      (r'^admin/', include(admin.site.urls)),   
      )
    Iniciamos nuestro servidor en el cmd:
      python manage.py runserver

Abrimos nuestro navegador y escribimos la dirección:
http://localhost:8000/admin/
Para iniciar sesión usaremos los datos que registramos en la parte 6.
Esta es la interfaz de nos presenta Django para la administración de los modelos 
 Puedes realizar las operaciones que deseas con normalidad.
En el siguiente Post mostraremos las parte de administración de Django tomando como referencia nuestro modelo creado.

1 comentario:

  1. Hola Jhony Omar, Gracias por el tutorial, Muy Buen ejemplo, si tiene ejemplos de vistas de esta aplicación le agradecería si me los puede publicar.

    ResponderEliminar