Daniel Maldonado

miércoles, 16 de diciembre de 2015

Mi primer modelo en #Django

En una de las últimas entrega sobre lo que estamos aprendiendo a trabajar con #Django mostramos como sincronizar las bases de datos con Django, a partir del lanzamiento de la versión 1.9 el comando:


$ ./manage.py dbsync

deja de estar en funcionamiento y en su remplazo podemos utilizar

$ ./manage.py migrate

Esto es para tenerlo en cuenta de aquí en adelante y saber el traspaso de algunas funcionalidades. Además cabe aclarar que el comando migrate es una simple sincronización de tus modelos hacia tu base de datos. Este comando examina todos los modelos en cada aplicación que figure en la variable de configuración INSTALLED_APPS del archivo settings.py

El siguiente paso es casi inevitable, comenzar a crear nuestro propio modelo de datos para la aplicación creada llamada cursos.

Para ello les propongo editar el archivo cursos/models.py y agregar la siguiente líneas:

from __future__ import unicode_literals

from django.db import models

class Profesor(models.Model):
        nombre = models.CharField(max_length=30)
        apellido = models.CharField(max_length=40)
        email = models.EmailField()

class Curso(models.Model):
        titulo = models.CharField(max_length=50)
        descripcion = models.CharField(max_length=100)
        fecha_inicio = models.DateField()

Como se observa, dos clases creadas Profesor y Curso con sus correspondientes atributos que la describen. Por el momento y solo por ahora vamos a dejar de lado las relaciones e ir siempre por lo más simple de entender y seguir avanzando.

Como información adicional, podemos recurrir a la documentación de Django para conocer todos los Fields que soporta y las características que pueden incluir.

Que es lo que pasa si ahora intentamos realizar nuevamente la migración?

$ ./manage.py migrate
Operations to perform:
  Apply all migrations: admin, contenttypes, auth, sessions
Running migrations:
  No migrations to apply.

Si fueron atentos a este punto, se habrán dado cuenta que nuestra aplicación cursos no se encuentra dentro de la variable de configuración INSTALLED_APPS y por esa razón al chequear el resto de las aplicaciones y notar que no existe un cambio no lo toma como tal.

Es por ello que agregamos nuestra apps a la variable de la siguiente forma:

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'cursos',
)

$ ./manage.py makemigrations
Migrations for 'cursos':
  0001_initial.py:
    - Create model Curso
    - Create model Profesor

Ahora bien, si ejecutamos el comando migrate todo puede resultar como lo esperamos.

$ ./manage.py migrate
Operations to perform:
  Apply all migrations: admin, cursos, contenttypes, auth, sessions
Running migrations:
  Rendering model states... DONE
  Applying cursos.0001_initial... OK

Dejamos hasta aquí así podemos apuntar a nuevos conceptos en las próximas entregas.

Saludos!

lunes, 14 de diciembre de 2015

Nuevo #WordPress 4.4 "Clifford"

Desde hace unos días, el equipo de desarrolladores de WordPress anunció que se encuentra disponible la nueva versión de WordPress 4.4 llamada "Clifford" en honor al trompetista de jazz Clifford Brown.


WordPress 4.4 introduce por defecto el Theme Twenty Sixteen, que no es más que una versión mederna del clásico theme de blogs.

Otra característica que se agrega son las de las Imágenes Responsivas, con la intención de que todas las imágenes que se visualizan desde WordPress tengan la capacidad de ser responsivas y verse bien desde el dispositivo que se visite, ajustándose automáticamente al tamaño que corresponda.


Finalmente cierra con dos características interesantes, la primera tiene que ver con la posibilidad de embeber contenidos de otras webs con simplemente ingresar una URL en el editor cuando vamos a publicar un post, incluyendo título, descripción, icono del sitio y enlace. La segunda es el nuevo WP REST API, tal y como indica la documentación, "esto indica una nueva era en el desarrollo de WordPress".

A pesar que pasaron unos días del lanzamiento, no podía dejar de recomendar que es posible comenzar a jugar ya con WordPress 4.4 "Clifford".

Saludos!

Enlace | WordPress 4.4 "Clifford"

jueves, 10 de diciembre de 2015

Se encuentra disponible #Django 1.9

A principios de Diciembre y luego de 10 meses y medio de trabajo, el equipo de Django anunció la versión final de Django 1.9


En la documentación del proyecto se encuentra en detalle las nuevas funcionalidades y todos los cambios con los que se encuentra esta versión.

Es por ello que desde nuestro punto de aprendizaje, alentamos a todos los usuarios a comenzar a utilizar esta nueva versión. Recuerden que su actualización por medio de pip resulta muy simple al usuario.

$ sudo pip install --upgrade Django
  Downloading Django-1.9-py2.py3-none-any.whl (6.6MB)
    100% |████████████████████████████████| 6.6MB 54kB/s 
Installing collected packages: Django
  Found existing installation: Django 1.8.7
    Uninstalling Django-1.8.7:
      Successfully uninstalled Django-1.8.7
Successfully installed Django-1.9

$ django-admin version
1.9

Django 1.9 junto a las próximas versiones con correcciones será mantenida hasta Abril del 2017, por otro lado hasta aquí se da por finalizado el soporte a Django 1.7, siendo la versión 1.7.11 la última versión correspondiente a la rama 1.7.x y se invita a los proyectos creados sobre esta versión a migrar a versiones 1.8 TLS o directamente a esta nueva versión 1.9

Saludos!

jueves, 3 de diciembre de 2015

Sincronizar las Bases de Datos en #Django

El próximo paso y siguiendo con el tutorial mientras aprendemos Django es aprovechar la configuración de nuestro proyecto con SQLite y crear por primera vez el archivo con la base de datos.

Figura 1: Sincronizar las Bases de Datos en Django

Esto lo podemos ejecutar de la siguiente forma.

$ ./manage.py dbsync

Figura 2: Ejecución del comando dbsync para la sincronización

Como es la primera vez que estamos sincronizando el esquema de base de datos o para nuestro caso creando el archivo de SQLite nos va a preguntar si queremos crear un superusuario con la posibilidad de administrar la plataforma.

Figura 3: Creación de un superusuario

Si listamos los archivos que generó, podemos ver que se encuentra creado en la raíz de nuestro proyecto un archivo llamado db.sqlite3 que es donde se encuentra el esquema creado.

Podemos realizar una consulta de la siguiente manera:

$ sqlite3 db.sqlite3 
SQLite version 3.7.17 2013-05-20 00:56:22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite>

Figura 4: Query ejecutada en SQLite

Como podemos observar, Django creo varias tablas e indices automáticamente, toda de las aplicaciones que incluye.

Si nuevamente vamos al archivo settings.py vamos a ver que aplicaciones está cargando nuestro proyecto:

# Application definition

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
)

El próximo paso es crear un modelo para la aplicación que tenemos, cargarlo en esta configuración y volver a sincronizar nuestra base de datos.

Saludos!

miércoles, 2 de diciembre de 2015

#MongoDB Avanzado en la codemotion 2015

Uno de los videos que me estaba debiendo y que aprovecho la oportunidad para compartirlo a todos se realizó en la última codemotion 2015 los días 27 y 28 de Noviembre.


En esta conferencia, Victor Cuervo nos enseña muchas cosas interesantes sobre #MongoDB con ejemplos y algo de práctica. Otra de las cosas que me gustó mucho además de la dinámica de la charla es su forma de explicar como pasar un modelo relacional SQL a NoSQL. No se lo pierdan!


Saludos!

martes, 1 de diciembre de 2015

#Django y las Bases de Datos

Continuamos aprendiendo algunas cosas interesantes junto al Frameowork #Django, en esta oportunidad nos toca hablar un poco sobre las Bases de Datos.


Afortunadamente, es posible fusionar Django con cuasi cualquier motor de Base de Datos, o por lo menos los más reconocidos en el mercado, tales como MySQL, PosgreSQL, SQLite, SQL Server, Oracle, etc. y todo esto gracias a las implementaciones Modelo/Vista/Controlador en el cuál está creado este Framework.

En el momento que creamos nuestro primer proyecto, Django incluye una configuración básica para el pseudomotor de Base de Datos SQLIte3 y el mismo podemos verlo en el archivo settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

En estas configuraciones, podemos observar que ENGINE le indica a Django el motor de base de datos que vamos a estar utilizando, este puede variar de la siguiente forma:


  • django.db.backends.postgresql_psycopg2 (PostgreSQL)
  • django.db.backends.mysql (MySQL)
  • django.db.backends.sqlite3 (SQLite)
  • django.db.backends.oracle (Oracle)


Por otro lado, dentro de este archivo de configuración podemos incorporar más variables de configuración para nuestra base de datos:

NAME la indica a Django el nombre de tu base de datos. Si estás usando SQLite, especifica la ruta completo del sistema de archivos hacia el archivo de la base de datos (por ej. '/home/django/datos.db').

USER le indica a Django cual es el nombre de usuario a usar cuando se conecte con tu base de datos. Si estás usando SQLite, deja este en blanco.

PASSWORD le indica a Django cual es la contraseña a utilizar cuando se conecte con tu base de datos. Si estás utilizando SQLite o tienes una contraseña vacía, deja este en blanco.

HOST le indica a Django cual es el host a usar cuando se conecta a tu base de datos. Si tu base de datos está sobre la misma computadora que la instalación de Django (o sea localhost), deja este en blanco. Si estás usando SQLite, deja este en blanco

Es por ello que si están acostumbrado a trabajar con bases de datos, esto no es más que indicarle a nuestra aplicación las credenciales válidas para poder tener conexión con nuestra base de datos.

Saludos!

Entradas populares