Archive for the 'django' Category

El estado de la versión 1.0 de Django

En Chicago comenzó la PyCon 2008, la conferencia de python en EEUU, y uno de los creadores de Django Adrian Holovay, esta dando una charla sobre el estado de django, os recomiendo el post de unbracketed que hace un resumen de la charla titulada “el estado de django”.

En la charla comenta que el Equipo de desarrollo de Django no tienen un calendario exigente buscando liberar la versión 1.0, y pide disculpas a las empresas que están esperando una versión para adoptarlo en sus desarrollos, esto ya se comento en la traducción que hizo Marcelo Ramos de la entrevista que le hicieron a Adrian Holovaty

Desarrollos destacados

Haciendo una revisión del desarrollo de Django en el ultimo año destacan:

El avance de GeoDjango que hace posible tener un framework web especializado en geo-localización, nos da geo-soporte como distancias localización de objetos, distancia geográfica entre dos objetos, los tíos de GeoDjango están haciendo un gran trabajo que esta permitiendo una herramienta de desarrollo para un sector tan creciente como el GIS, sin olvidar que le esta dando un empujón a POSTGIS leer el manual en español.

Proyectos afines

Diferentes sitios han sido lanzados por la comunidad en el pasado año.

En lo que estamos trabajando

La refactorización del queryset representa una mayor refactorización de la lógica de las consultas de la BBDD, esto permitirá tener un código mas limpio y mejora las actuales deficiencias y los modelos pendientes

La rama de los nuevos formularios del Admin se ha reescrito para utilizar newforms, se ha hecho muchisimo esfuerzo para permitir a los desarrolladores esta característica, también se ha desacoplado el metadata del admin de los modelos, se habilita la posibilidad de crear diferentes sitios en el admin para modelos básicos.

Una de las características pendientes para la versión 1.0 es la validación del modelo de datos, esto es un punto muy importante antes de subir versión ya que se esta estudiando las diferentes formas mas adecuadas de hacerlo.

Una muy buena noticia

Por ultimo dan la noticia de la creación de una fundación sin animo de lucro, la cual se encargara de promocionar y llevar mas lejos a Django.

Instalar Eclipse en Ubuntu

Eclipse es un IDE multiplataforma excepcional, esta desarrollado en Java, vamos a hacerlo facilito, por lo tanto para empezar debemos seguir las instrucciones de Sun para instalar la JRE 1.5 el motor de java, elemento necesario para el correcto funcionamiento de Eclipse (o cualquier otra aplicación Java)

Una vez que descargado e instalado el JRE, en nuestro caso la versión 6 Update 3 (jre-6u3-linux-i586.bin).

Añadimos una alternativa al orden de ejecuciones de java:
sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jre/bin/java" 1

La ponemos por defecto:
sudo update-alternatives --set "java" "/usr/lib/jre/bin/java"

El sistema no debería devolver:
Se utiliza `/usr/lib/jre/bin/java’ para proveer `java’.

Comprobamos si funciona todo correctamente:
java -version

Si el sistema nos contesta sin errores como, por ejemplo, esto:
java version “1.6.0_03″
Java(TM) SE Runtime Environment (build 1.6.0_03-b05)
Java HotSpot(TM) Server VM (build 1.6.0_03-b05, mixed mode)

Funciono correctamente a la primera!!!!, ahora ya podemos descargar Eclipse, elegimos una instalación de Eclipse limpia que ocupe aproximadamente unos 137 MB. Una vez descargado y descomprimido lo ponomes en /usr/sbin/eclipse. Eu Voila!!! funcionando.

Introducción a Django

Tomo grandes partes sino todo de http://comesfa.xin.cat/Llibre:DjangoBook/Introducci%C3%B3_a_Django sino sabeís Catalán os tendréis que fiar de mi…

Django es un framework (marco de trabajo) de alto nivel basado en Python, facilita el desarrollo de Aplicaciones web dinámicas, te abstrae de los problemas comunes del desarrollo web y acelera las tareas mas frecuentes en la programación.Proporciona un método de mapear las urls, básicamente ejecuta un código en especial para cada url, por ejemplo para la url /productos/coches/audiA4, te mostrara el contenido de la tabla productos de la familia coches lo que tenga de audiA4, esto permite tener “urls friendly” osea urls que permite a los usuarios que buscan, te encuentren de una manera mas rápida.

Te permite mostrar y validar formularios de manera muy simple, fácilmente puede manipular el código del formulario adaptándolo a las necesidades de tu aplicación y a una respuesta simple para el usuario.

Convierte los datos enviados por los usuarios (a través de formularios, por ejemplo) en estructuras de datos que pueden ser manipuladas fácilmente.

A través de plantillas ayuda a separar el contenido de la presentación, evitándote tener que manipular la lógica de negocio cuando tengas que realizar cambios de apariencia en tu website.

Se integra fácilmente con la capa de base de datos, y permite que tu trabajo sea mas productivo a un nivel de abstracción mas alta y olvidate de las extensiones .aspx, .php, .jsp

No te voy a explicar a programar en python, eso te deberás buscar la vida, hablaremos sobre django aunque necesariamente tendremos que programar en python y explicare lo que pueda.

Sobre Python te contare que:

Es un lenguaje interpretado, no es necesario compilarlo.

Python utiliza tipos dinámicos, esto quiere decir que no necesitas declarar el tipo de datos de tus variables, esto no me gusta excesivamente pero todavía no conozco a python en exceso para poder criticarlo, por lo tanto le daré una oportunidad.

Su sintaxis es concisa i expresiva, necesitaras menos código para realizar la misma tarea que en otros lenguajes como Java o C#.
Ofrece unas características potentes de introspección i meta-programación que hacen que sea posible inspeccionar i añadir código a los objetos en tiempo de ejecución.

Aparte de las ventajas de python, django te permite un desarrollo rápido.

Django mantiene de una manera estricta un diseño limpio en su código y te permite entender mas fácilmente tus aplicaciones.

Django promociona el acoplamiento débil, diferentes módulos de la aplicación deberían ser intercambiables y se comunicaran con otros módulos a través de APIs limpias y concisas.

Por ejemplo el sistema de plantillas no sabe nada sobre el sistema de acceso a la base de datos, el cual no sabe nada sobre la capa de petición/respuesta HTTP. Cada una de estas capas son diferentes y ligeramente acoplables con el resto.

Django utiliza la arquitectura MVC, es el patrón que dice que el código para definir y acceder a los datos (El modelo) esta separado de la lógica de negocio (el controlador) que esta separado de la interficie de usuario (la vista).

Django tiene un único lugar donde guardar la configuración, y la capa de acceso a la BD tiene un nivel alto de abstracción para poder cambiar el servidor de BBDD (de mysql a postgreSQL) de una manera rápida y sencilla.

La historia de django no te la explico buscala…

Algunos ejemplos de quien utiliza Django.

* http://www.ljworld.com/
* http://www.lawrence.com/
* http://www.6newslawrence.com/
* http://www.visitlawrence.com/
* http://www.lawrencechamber.com/
* http://www2.kusports.com/stats/
* http://washingtonpost.com
* http://chicagocrime.org
* http://tabblo.com
* http://texasgigs.com
* http://grono.net
* http://traincheck.com

Puedes encontrar mas en djago-sites.

Relaciones en modelos de datos con Django

Fuente: http://www.djangoproject.com/documentation/model-api/#relationships Una pequeña traducción a mi manera y para mi...

Evidentemente, el poder de las base de datos relaciones se basa en la relación de las mismas tablas. Django ofrece caminos para definir los 3 tipos mas comunes de relaciones en tablas relacionales (n:1, uno a muchos) many-to-one, (n:n, muchos a muchos) many-to-many, (1:1, una o uno) one-to-one.

Relación many-to-one (n:1)
Para definir una relación many-to-one, usamos ForeignKey. Lo usamos como otro tipo de Campo, incluyéndolo en la clase modelo como atributo.

ForeignKey requiere un argumento de posición, la clase con la cual se relaciona a traves de ese Campo.

Por ejemplo, si en un modelo que tenemos Car este tiene a Manufacturer (un Manufacturer, hace múltiples coches pero un coche solo tiene un fabricante) usa las siguientes definiciones:

PYTHON:
  1. class Manufacturer(models.Model):
  2.     # ...
  3.  
  4. class Car(models.Model):
  5.     manufacturer = models.ForeignKey(Manufacturer)
  6.     # ...

Para crear una relación recursiva ( un objeto tiene una relacion many-to-one consigo mismo) usamos models.Foreignkey('self').

Si necesitas crear una relación en un modelo que todavía no se ha definido, puedes usar el nombre del modelo

PYTHON:
  1. class Car(models.Model):
  2.     manufacturer = models.ForeignKey('Manufacturer')
  3.     # ...
  4.  
  5. class Manufacturer(models.Model):
  6.     # ...

Sin embargo, solo puedes usar strings para referirte a modelos que esten en el mismo fichero (models.py) ( no puedes usar un string que hace referencia a un modelo de diferentes aplicaciones o a un modelo que esta siendo importado en otros sitios.

Interiormente Django añade "_id" al nombre del campo con el cual se crea el nombre de la columna en la BD, en el ejemplo de arriba, la tabla Car tiene una columna que se llama manufacturer_id. (Puedes cambiar explícitamente db_column)

Sin embargo, tu código nunca deberá tener el nombre de la columna, a menos que escribas SQL personalizado, Siempre trataras con los nombres de los campos del modelo.

Una sugerencia, pero no requerimiento, seria que el nombre del campo Foreignkey (manufacturer en el ejemplo anterior) sea el nombre del modelo en minúsculas. Puedes por supuesto llamar al campo como quieras por ejemplo:

PYTHON:
  1. class Car(models.Model):
  2.     company_that_makes_it = models.ForeignKey(Manufacturer)
  3.     # ...

Relaciones many-to-many
Para definir una relación many-to-many, usamos ManyToManyField, lo usamos como cualquier tipo de campo, incluyéndolo como atributo de la clase del modelo.

ManyToManyField requiere un argumento posicional: la clase con la cual se relaciona a través de ese Campo.

Por ejemplo, si una Pizza tiene múltiples Objetos Topping (un Topping puede estar en múltiples pizzas y cada pizza tiene múltiples toppings) esto queda representado así:

PYTHON:
  1. class Topping(models.Model):
  2.     # ...
  3.  
  4. class Pizza(models.Model):
  5.     # ...
  6.     toppings = models.ManyToManyField(Topping)

Como con ForeignKey, una relación consigo misma es definida usando el string 'self' en lugar del nombre del modelo, y puedes referirte a los que todavia no se han definido usando un string con el nombre del modelo. Sin embargo, solo puedes usar strings para referirte a modelos que estén en el mismo fichero (models.py) ( no puedes usar un string que hace referencia a un modelo de diferentes aplicaciones o a un modelo que esta siendo importado en otros sitios.

Una sugerencia, pero no requerimiento, es que el nombre del campo tipo ManyToManyField (toppings en el ejemplo anterior) sea un plural que describa el conjunto de objetos relacionados con el modelo, "toppings = models.ManyToManyField(Topping)"

Internamente, Django crea una tabla unión intermedia para la relación (n:n) many-to-many.

No importa en que modelo tengas el ManyToManyField, pero solo lo necesitas en uno de los modelos no en ambos.

Generalmente el campo ManyToManyField debe ir en el objeto que sera editado en la admin. Si estas usando Django Admin. En el ejemplo anterior, toppings esta en Pizza (en vez de que Topping tenga un campo pizzas de tipo ManyToManyField) porque es mas natural pensar sobre que Pizza tiene toppings, aunque topping esta en múltiples pizzas. Es camino esta en poner por encima esto para que en el Formulario de Admin del modelo Pizza los usuarios seleccionen los ingredientes.

Mirar el modelo de ejemplo de relaciones tipo many-to-many en un ejemplo completo

El objeto ManyToManyField tiene mas argumentos para definir como debe trabajar su relación, todos son opcionales.

Relaciones one-to-one (1:1)

La semántica de las relaciones uno a uno cambiaran pronto, De modo que no recomendamos su uso.

« Previous PageNext Page »