Posts Tagged ‘ django ’

Game of Zones: Database

Buenas noches a la (cuarta) entrega semanal de Game of Zones, hoy hablaremos sobre la base de datos que usará la aplicación web.

Al principio pensé en usar simplemente variables en memoria para cargar los datos desde la API de foursquare, pero dado que tendría que guardar información propia de la aplicación (por ejemplo, las distintas zonas con sus reyes) decidí usar una base de datos, lo cual creo que es más limpio y eficiente (sobre todo con grandes cantidades de datos, que espero algún día tenerlas).

La base de datos estará compuesta por varios tipos de datos, como por ejemplo, usuarios o venues (cada uno de los lugares de foursquare). Cada uno de estos no será más que un tipo de dato propio de foursquare, formateado para eliminar los atributos que no nos interesan y para añadir otros que hacen falta. Además, se van a añadir tipos de datos propios de Game of Zones, como por ejemplo cada una de las zones del mapa.

Lo siguiente que quiero comentar es la facilidad con la que Django te permite trabajar con bases de datos. De una manera asombrosamente puedes actualizar la existente (si la has configurado al crear el proyecto Django usa una base de datos con varios datos propios) con tus tipos de datos, tus tablas y tus instancias.

Usando Python creas los modelos de datos que necesitas de una manera intuitiva, ayudado por la documentación para las dudas, y simplemente sincronizando la base de datos, Django te genera automáticamente todas las tablas necesarias, incluyendo tablas heredadas o tablas necesarias para relaciones muchos-a-muchos.

Después de esto, simplemente creando objetos de las clases definidas anteriormente y usando el método save() de estas, las instancias quedan registradas y guardadas en la base de datos. Además, también nos permite realizar consultas sin tener que escribir nada en SQLite (que es el sistema de gestión que he usado en el proyecto) por lo que trabajar con la base de datos no es más que un juego de niños.

No tiene mucho más el trabajar con bases de datos gracias a Django. La complicación será la que tú le quieras poner, o la que requieran tus datos.

Para el proyecto estoy usando sqlite3, que viene integrado en Django, por lo que no necesito ninguna librería externa (para usar Oracle, PostgreSQL o MySQL sí que me haría falta una).

Para terminar, decir que ya están activos y actualizándose continuamente los repositorios del proyecto tanto en Github como en la forja de rediris.

Anuncios

Django: Don’t Repeat Yourself

Django es un framework para desarrollo web de código abierto, escrito en el lenguaje Python, que se basa en el paradigma del Modelo Vista Controlador (MVC) de una manera un tanto peculiar.

Su meta fundamental es facilitar la creación de sitios webs con una complejidad media/alta. Hace hincapié en el re-uso, la conectividad y la extensibilidad de componentes (módulos, para que nos entendamos), el desarrollo rápido y sobre todo, en el principio DRY: Don’t Repeat Yourself (también conocido como Once and Only Once) que creo que no hace falta explicar lo que significa. Django usa Python para todo, tanto en configuraciones como en archivos o en modelos de datos.

Como hemos dicho, Django usa una versión particular del MVC, ya que al Controlador, lo llama Vista, y a la Vista, Plantilla. ¿Por qué?

La respuesta es sencilla, porque Django no se desarrolló para seguir este modelo, pero (casualmente) lo implemente casi a la perfección. Para Django la Vista no es “cómo” se representan los datos, sino “qué” datos se representa. El “cómo” es trabajo de las Plantillas. El trabajo del Controlador lo realiza el mismo framework, ya que es el encargado de procesar las peticiones y los eventos que se producen.

Más características de Django son:

  • Soporte para base de datos (mapeador objeto-relacional y API)
  • Soporte para PostgreSQL, MySQL, Oracle o SQLite.
  • Aplicaciones independientes del proyecto que pueden instalarse en cualquier web con Django.
  • Un sistema incorporado de “vistas genéricas” que ahorra mucho trabajo.
  • Un sistema de plantillas basado en etiquetas.
  • Un dispensador de URL basado en expresiones regulares.
  • Un middleware para caché, sesiones y protección de datos.
  • Soporte de internacionalización.
  • Sistema de documentación incorporada.

Comentar por último que a la hora de hacerlo correr en un servidor web, se recomienda usar Apache 2 con mod_python.

Postdata: Os dejo direcciones por si queréis informaros más:

Game of Zones: La decisión que condicionó el proyecto

De nuevo estoy aquí para seguir escribiendo sobre Game of Zones (GoZ) con la vista puesta en la fase local del CUSL VI (Concurso Universitario de Software Libre).

El miembro del jurado que le toque revisar mi proyecto, no lo tendrá nada fácil, pues es tan poco el progreso físico que terminará rápidamente su trabajo. Por esto quiero escribir este post, no como escusa, sino como explicación.

A la hora de iniciar cualquier proyecto, siempre se plantean las mismas dudas: ¿qué herramientas utilizamos? ¿sabemos manejar las herramientas que están a la “última” (entiéndase por esto las que tienen más éxito en el mercado)? ¿merece la pena perder tiempo en aprender herramientas nuevas, o seguimos usando las que ya conocemos? Bien, pues mi punto de vista respecto a este tema siempre ha sido el mismo: “el saber no ocupa lugar”. A falta de empleo y de quizás “encontrar mi verdadera vocación”, creo que lo mejor es probar todo lo que se pueda, para así tener más donde elegir.

Así pues, decidí embarcarme en esta aventura y desarrollar una aplicación web (anteriormente ya había probado con el desarrollo de un videojuego en la facultad). Lo primero es lo que ya he comentado, ¿qué herramientas uso?.

Yo ya conocía herramientas de desarrollo web, tales como HTML, CSS, JavaScript o PHP, y perfectamente era capaz de desarrollar una aplicación web (había trabajado un poco con CodeIgniter) pero mis amigos, más específicamente un django developer, me comentaban de la facilidad y de la versatilidad de la dupla Python+Django. Sin pensármelo dos veces decidí la opción más arriesgada, y la que con un gran sacrificio en tiempo, me iba a reportar mayores ventajas para el futuro.

Así pues me embarqué en una aventura de aproximadamente tres meses, en los que compaginaba las clases con el aprendizaje autodidacta de Python, en un principio, y de Django (cuando ya dominaba más o menos Python). Tras leerme varios libros, tras muchos programas de prueba y muchos quebraderos de cabeza puedo decir que he aprendido más de lo que pensaba.

En Navidad empecé con el desarrollo propiamente dicho, pero me di cuenta de que aún me faltaba mucho para poder desarrollar fluidamente, continuas miradas a los libros para consultas y nuevas trabas me hacían ir muy lento. Continuas luchas con la API de fousquare y con SQLite (que también he tenido que aprender a usarlo) me hicieron retrasarme.

Por fin tras el parón por exámenes pude ponerme al 100% con el proyecto, y desde febrero sólo trabajo en él. La situación actual es la siguiente: trabajo en dos frentes distintos. Por un lado, trabajo en el diseño de la web aprendiendo a usar Bootstrap, que es una interfaz para HTML, CSS y JavaScript que nos permite de manera muy sencilla diseñar las páginas de la aplicación web. Mi negada visión para el diseño y la elección de colores me está dificultando esta tarea, pero por suerte cuento con gente que está ayudándome con las decisiones.

Por otro lado trabajo en el Sistema de Gestión de Base de Datos, usando Python+Django y SQLite para el acceso a los datos. Este trabajo es más sencillo puesto que ya lo he realizado en la facultad antes, así que espero que avance más rápidamente.

Trabajo una media de 6 a 8 horas diarias, repartiendo entre mañana y tarde, y los fines de semana, me relajo un poco más y quizás no llegue a 4 horas.

La forja apenas la he usado, y para colmo este fin de semana ha estado inactiva por problemas internos, así que la actualizaré con la menor brevedad posible.

Espero escribir de nuevo con más problemas que me vaya encontrando y sus respectivas soluciones.

Modelo Vista Controlador

El Modelo Vista Controlador es un patrón para el desarrollo del software que se basa en separar los datos (por un lado), la interfaz del usuario (por otro) y la lógica interna (por un último lado). Es mayormente usado en aplicaciones web, dónde la vista es la página HTML, el modelo es el Sistema de Gestión de Base de Datos y la lógica interna, y el controlador es el responsable de recibir los eventos y darles solución.

A continuación vamos a desgranar más cada elemento:

  • Modelo: Es la representación de la información en el sistema. Trabaja junto a la vista para mostrar la información al usuario y es accedido por el controlador para añadir, eliminar, consultar o actualizar datos.
  • Vista: Es la presenta al modelo en un formato adecuado para que el usuario pueda interactuar con él, casi siempre es la interfaz de usuario.
  • Controlador: Es el elemento más abstracto. Recibe, trata y responde los eventos enviados por el usuario o por la propia aplicación. Interactua tanto con el modelo como con la vista.

    Modelo Vista Controlador

Para entender mejor el uso del modelo MVC vamos a ver su flujo de control:

  1. El usuario activa un evento en la interfaz (botón, enlace, etc.)
  2. El controlador recibe el evento y lo gestiona.
  3. El controlador consulta o modifica el modelo.
  4. El controlador manda la respuesta a la interfaz y esta reacciona en función de esta (cambia de pantalla, abre un enlace, etc.)
  5. La interfaz espera una nueva acción del usuario.

Una vez queda claro el funcionamiento del modelo, vamos a ver quién y cómo lo utiliza.

Existen multitud de frameworks que usan este modelo, entre los más destacados están:

  • Cocoa, escrito en Objetive C (usado en Mac OS X)
  • Ruby On Rails, escrito en Ruby.
  • Struts o Spring, escritos en Java.
  • Catalyst, escrito en Perl.
  • Symfony o Zend, escritos en PHP.
  • Django o Pylons, escritos en Python.

Yo, personalmente, sólo he trabajado con PHP, más concretamente CodeIgniter, (es lo que me han “enseñado” en la facultad) y ahora mismo que estoy aprendiendo a usar Django. Personalmente, me parece mucho más fácil de usar Django que , ya que no fui capaz de usar fluidamente PHP en todo un curso y con Python/Django llevo apenas tres meses de forma autodidacta y más o menos hago mis pinitos.