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.

sábado, 29 de marzo de 2014

Instalación y Configuración de Django - PARTE 1



Django es un Framework de desarrollo de aplicaciones rápido, pragmático y con un diseño limpio basado en Modelo-Vista-Template.

Existe abundante información en la web acerca de lo que es Django Framework y por tal razón no profundizaré en eso.

Aquí les enseñare como instalar y configurar Django para poder comenzar a trabajar con nuestros proyectos: 

PASO 1. Instalar Python Descargar Python
   - Luego comprobamos que se haya instalado correctamente:


PASO 2. Instalamos Django. 
Lo descargamos *.zip Descargar Django y lo compilamos con el CMD:
- Extraemos Django en alguna unidad  y con el cmd ubicamos el archivo y escribimos
       C:/Django-1.4.1/ python setup.py install

- Comprobamos que todo este correcto
       C:\>python
       >>>import django
       >>>django.VERSION
       (1, 4, 1, 'final', 0)

PASO 3. Instalación de APPS. 
- Hasta aquí ya tienes Django instalado en tu PC. Ahora es muy necesario instalar algunas APPS Django que son paquetes Python diseñados específicamente para usarse en un proyecto Django y que nos ayudaran en la migración, sincronización de BD, reportes pdf, etc. Los mas usados son:
  • django-debug-toolbar-0.9.4
  • django-extensions-1.0.3
  • django-mptt-master
  • django-registration-0.8
  • easy-thumbnails-1.2
  • setuptools-2.1
  • sorl-thumbnail-master
  • South-0.7.6
  • thumbs-v0.4
  • virtualenv-1.11
  • xhtml2pdf-0.0.5
Aquí les dejos todas estas apps comprimidas Descargar APPS
Para su instalacion es igual como instalamos Django, descomprimimos y vamos accediendo a las carpetas y hacemos
                C:/carpeta app/ python setup.py install

Todo esto se instalara en C:\Python27\Lib\site-packages
Debes tener en cuenta que algunas APPs dependen de otras y si durante la instalación te arroja algún error debe de ser porque dicha APP aun no ha sido instalada.

PASO 4. Base de Datos y Configuración del PATH
-Primero tienes que instalar con normalidad tu Motor MySQL
-Luego necesitamos instalar dos aplicativos extras(MySQL-python-1.2.3.win32-py2.7) Descargar AQUI e instalarlas.

-Luego que instalamos las APPs necesitamos configurar el PATH del sistema para que python pueda reconocerlas y hacer uso de ellas; nos vamos a la carpeta donde se instalo python y copiamos la dirección y lo pegamos en el path.

              C:\Python27\Lib\site-packages



Listo con esto ya tendríamos Instalado Python con Django y las principales apps. Luego ya podríamos comenzar a crear nuestros proyectos, correr nuestro servidor, sincronizar nuestros modelos, hacer migraciones etc, sin ningún problema.

En el siguiente post comenzaremos a desarrollar un proyecto desde cero. Siguiente Post


Generación de Backup en Java

Hola, quiero compartir un ejemplo que permite generar Backup ó copias de respaldo de una BD y que me ha sido de gran ayuda al usarlo en aplicaciones que he desarrollado. Bueno Comencemos:

En el ejemplo muestro un ComboBox donde se listan todas las BD que tiene el motor de base de datos, en este ejemplo estamos trabajando con MySQL.

   private void ListaBD(){
      Connection con;
      PreparedStatement ps;
      ResultSet rs;
      try{
          //Preparamos la coneccion a la BD
         Class.forName("com.mysql.jdbc.Driver");
         con = DriverManager.getConnection("jdbc:mysql://localhost:3306","root","");
         //Preparamos consulta
         ps = con.prepareStatement("SHOW DATABASES");
         rs = ps.executeQuery();
         while(rs.next()){
             //Llenamos la lista 
            comboLista.addItem(rs.getObject(1));   
         }
      }
      catch(Exception e){
         JOptionPane.showMessageDialog(null, e.getMessage());
      }        
   }

Luego se crea el método para evento del boton "Backup", estamos usando un JFileChooser para especificar la ruta donde deseamos guardar nuestro backup.

   private void GenerarBackup(String bd){    
      //Creamos la ruta para guadar el backup
      int resp = FileChooser.showSaveDialog(this);   
      if(resp==JFileChooser.APPROVE_OPTION){
         //le añadimos la extencion *.sql
         dir=String.valueOf(FileChooser.getSelectedFile().toString())+".sql";      
         try{
            Runtime runtime = Runtime.getRuntime();
            File fichero = new File(dir);
            FileWriter fw = new FileWriter(fichero); 
            Process child = runtime.exec("C:/Archivos de programa/MySQL/MySQL Server 5.1/bin/mysqldump --opt --password= --user=root --databases "+bd+" -R");
         
            //Process es el que ejecuta el comando para buscar el mysqldump.exe
            InputStreamReader irs = new InputStreamReader(child.getInputStream());
            BufferedReader br = new BufferedReader(irs);

             //Aquí espesamos a sobrescribir el archivo *.sql
            String line;
            while( (line=br.readLine()) != null){
               fw.write(line + "\n");
               System.out.println(""+ line);
            }
            msg.setText("Se ha creador un archivo *sql en la ruta: \n"+dir);
            fw.close();
            irs.close();
            br.close();
            JOptionPane.showMessageDialog(null, "Backup generado correctamente", "Operacion completada",JOptionPane.INFORMATION_MESSAGE);
         }
         catch(Exception e){
            e.printStackTrace();
            JOptionPane.showMessageDialog(null, "Error no se genero el backup por el siguiente motivo: " + e.getMessage(), "Verificar",JOptionPane.ERROR_MESSAGE);
         }
      }      

   }  

Nota: 
 Process child = runtime.exec("C:/Archivos de programa/MySQL/MySQL Server 5.1/bin/mysqldump --opt --password= --user=root --databases "+bd+" -R");
Es el que crea el proceso para ejecutar la consulta con el mysqldump, mi MySQL no tiene password pero si tuviera hay que ponerlo así: 

 Process child = runtime.exec("C:/Archivos de programa/MySQL/MySQL Server 5.1/bin/mysqldump --opt --password=tu_pass --user=user_bd --databases "+tu_bd+" -R");

Eso es todo y espero les ayude este post, aqui les dejo el ejemplo completo.