Preguntas y respuestas sobre Django desde Suecia

Sólo un idiota puede ser totalmente feliz.

Mario Vargas Llosa

Suscríbete al feed

Comentarios recientes

Manolo Guerrero, ese mexicano tan divertido que resulta ser un dios de jQuery y excelente amigo me presentó a Andreas Krohn, un emprendedor y desarrollador sueco que es la mente maligna detrás de WebHostNinja. Con Andreas he desarrollado una muy simpática aplicación para Facebook que corre sobre Google App Engine y Django. La aplicación será oficialmente lanzada en unos días y escribiré más sobre ella pronto.

Andreas ahora está considerando usar Django para su próximo proyecto y me hizo algunas preguntas, preguntas que estoy seguro muchos otros desarrolladores deben haber tenido así que decidí publicar mis respuestas y ayudar a quienes recien empiezan.

Andreas:

Alexis, he pasado algún tiempo leyendo sobre Django luego de tu recomendación para usarlo en el nuevo proyecto. Hay muy buena documentación en la Red, especialmente en djangoproject.com y djangobook.comVentanazul también ayuda!), pero tengo algunas preguntas para las que no he encontrado respuestas y me preguntaba si me podrías ayudar.

  • ¿Cómo uso diferentes aplicaciones en el mismo proyecto? Algunas aplicaciones pueden mantenerse totalmente separadas pero algunas necesitan compartir plantillas o funciones. Quiero hacer esto sin tener que crear dependencias complicadas o código espaguetti.
  • ¿Cuáles son las mejores prácticas para desarrollo en Django?

¡Gracias!

Alexis:

Hola, son muy buenas preguntas. No me considero todavía un ninja en Django pero creo que luego de haber desarrollado algunos proyectos tengo las ideas más claras sobre cómo atacar un nuevo proyecto (nota para los lectores: por favor corríjanme donde sea necesario).

Como ya sabes cada proyecto Django incluye un archivo settings.py donde puedes listar las aplicaciones que utilizarás. En muchos casos simples las aplicaciones viven en directorios bajo tu proyecto:

/project
/app1
/app2

pero ese no es siempre el caso. Puedes tener tus aplicaciones en cualquier parte de la ruta Python y así reutilizar una aplicación desde múltiples proyectos, James lo explica muy bien en reusable Django apps.

Las plantillas se pueden incluir con cada aplicación, creo que lo estándar es usar un directorio templates en el directorio de la aplicación, y luego se pueden reemplazar con plantillas específicas para cada proyecto definidas en settings.py. Un ejemplo de esto aparece en la parte 2 del tutorial.

Algo muy importante en Django: cuando sientas que estás repitiendo algo o creando código espaguetti es casi seguro que Django incluye una forma de hacerlo más fácil y claro.

¿Mejores prácticas para Django? He identificado algunas:

  1. No te repitas.
  2. Mantén todo independiente. Presentación en plantillas, lógica en vistas, diferentes grupos de tareas en diferentes aplicaciones.
  3. Las plantillas deben ser muy simples y nunca debes incluir lógica complicada en ellas, excepto sencillos bucles y condiciones. Usa vistas para las decisiones más complejas y que las plantillas se enfoquen solo en la presentación.
  4. Antes de escribir nuevo código verifica que otros en la comunidad no hayan escrito una aplicación o snippet que ya haga lo que necesitas. En algunos casos, la aplicación de comentarios por ejemplo, basta con instalar y usar, en otros se puede reusar y modificar el código.
  5. Nunca uses urls fijos (hardcoded), lo ideal es un URLConf bien diseñado, usando patrones con nombres, reverse en vistas y {% url %} en las plantillas.
  6. Finalmente, el grupo de usuarios de Django es genial, participan muchos desarrolladores con bastante experiencia y ganas de ayudar. Siempre busca antes de publicar, es muy probable que alguien ya haya preguntado lo que tú quieres saber y ya obtuvo la respuesta. Si no es así el tiempo entre publicar una nueva pregunta y obtener una respuesta útil suele ser de algunas horas, a veces solo unos minutos.

Recursos

Por supuesto eso no es todo lo que existe sobre Django bajo el sol, si encuentras algo más que sea de ayuda avísame.

Andreas:

¡Gracias por la extensa respuesta! Definitivamente es material para blog.

Algo que no entiendo del todo aún... modificar plantillas para que todo luzca bien es una cosa pero algo más complicado es cómo usar una aplicación desde otra. Digamos que tengo una aplicación para administrar sesiones de usuarios y autenticación, y otra para encargarse de los comentarios en un blog. Quiero que solo los usuarios autorizados puedan publicar comentarios así que utilizo la aplicación de autenticación para interactuar con la de comentarios. Partes de eso talvez se pueda hacer con una plantilla pero digamos, por ejemplo, que necesitas hacer algo más. ¿Cambiarías la aplicación de comentarios y tendrías a la de autenticación como una dependencia? ¿Escribirías una tercera aplicación a la medida que use las aplicaciones de autenticación y comentarios para que funcionen juntas?

Si esta es una pregunta confusa es porque estoy confundido. Para mi proyecto necesito usar muchas aplicaciones y lo quiero hacer correctamente desde el principio para evitar escribir código que no vaya a funcionar en el futuro.

Nuevamente, ¡gracias por la ayuda!

Alexis:

Sí, creo que escribir una tercera aplicación a la medida y que use las aplicaciones de autenticación y comentarios es la forma ideal de hacerlo. Es parecido a lo que hacemos al desarrollar aplicaciones con Drupal donde suelo iniciar un nuevo proyecto escribiendo un módulo Drupal específico para el sitio, un módulo que requiere y usa otros módulos.

Para Django eso significaría escribir una aplicación específica para el proyecto, una aplicación que se encargue de utilizar correctamente a todas las otras aplicaciones.

En tu caso esa tercera aplicación sería, idealmente, la única conexión entre autenticación y comentarios.

Eso es todo

Gracias Andreas por tus preguntas y por ayudarme a compartir algunas ideas sobre desarrollo de aplicaciones con Django.

Como siempre, todos los comentarios son bienvenidos.

Publica comentarios relevantes, usa español correcto y no envíes publicidad. Creemos discusiones en las que valga la pena participar. Puedes usar Markdown.

Tu comentario