Django es uno de los framework web hechos en Python más usados. Tiene un ecosistema de herramientas enorme que no para de crecer principalmente por dos razones: es open source y mantenido por la comunidad.

A pesar de que esto siempre es un aspecto positivo, a la hora de elegir y descargar los módulos apropiados, sus versiones y dependencias, configurar sus settings, añadirlos al proyecto, etc... puede ser una tarea repetitiva y tediosa, según el alcance del proyecto.

Además algunas de las dudas más comunes de la gente que se inicia con Django son: cuál es el mejor layout, la mejor estructura de directorios, de templates o de estáticos.

Aquí es donde entra Cookiecutter, una de las mejores herramientas para ahorrar tiempo en esta fase de creación del proyecto y que utiliza la filosofía 12-factor, dejando una de las estructura más simples y recomendadas para cualquier proyecto.

En este post vamos a ver cómo crear un proyecto Django con toda su estructura minimizando el tiempo invertido en configurar y preparar el entorno de trabajo utilizando Cookiecutter Django.

Esta utilidad ha sido creada por uno de los autores del libro Two Scoops of Django (mencionan la utilidad en el final del capítulo 3) y basada en Cookiecutter, que está hecho por la otra autora del libro.

Es, además, uno de los libros que tenemos en Paradigma como referente en los proyectos hechos en Django.

Con más de 4000 estrellas en Github, Cookiecutter es un módulo para pip que creará el layout de un proyecto Django incluyendo:

Además, dentro de cada archivo ya sea Python, HTML, JavaScript, CSS... se crearán las plantillas iniciales para empezar a programar cuanto antes, minimizando el tiempo invertido en arrancar un proyecto.

Lo único que se necesita tener instalado en el sistema es PostgreSQL (MySQL, SQLite o el gestor de base de datos que se prefiera), Virtualenv y Pip. Hacen falta para tener motor y cliente de base de datos, entorno virtual para encapsular el project, y gestor de paquetes Python con sus dependencias.

Entre las posibles opciones:

A continuación un vídeo donde usamos la herramienta, donde veremos cómo por consola se nos pregunta por una serie de valores, al terminar se creará un proyecto Django completo. Con todo el layout necesario para trabajar ready-to-go.

Pasos que se han seguido:

Nota: donde indica [x] es la opción por defecto elegida si se pulsa Enter.

Con estos pasos nos hemos ahorrado muchos comandos, configuraciones y creaciones de carpetas y ficheros. También, como puede verse en el vídeo, nos ha creado muchos ficheros y carpetas.

Ha creado el espacio para los estáticos, templates típicas como base.html, o las de errores 500, 400 y 404.html, toda la lógica y plantillas para login, log out, reset de contraseña, verificación de email, una app completa llamada users que tiene ya creados modelos, vistas,urls, tests y formularios con contenido preparado para funcionar.

En el vídeo podemos ver que tiene ya creadas vistas para operaciones CRUD sobre usuarios: listar, detalle, actualización y creación.

Así quedaría el layout del proyecto:

Como se puede ver, incluye README.rst, utilidades con scripts para dependencias con el sistema operativo, configuración para Pylint, locale para idiomas, documentación, licencias, librerías para testing, etc.

Tiene también alguna referencia de humor dentro de algunos archivos a modo de huevo de pascua, como este que está en models.py de users:

# First Name and Last Name do not cover name patterns
# around the globe!!!.

Las instrucciones para Docker tienen algunos pasos más, referente a la parte del contenedor y el sistema operativo que se esté usando, y no entran en el foco de este artículo. Aquí os dejo el código generado que se puede ver en el vídeo.

Tanto Cookiecutter como Cookiecutter Django tienen una buena comunidad, ambas documentaciones son extensas, están muy actualizadas y solo trabajan con librerías de terceros bien mantenidas. Tienen incluso un chat para dar soporte.

Enlaces de interés

Cuéntanos qué te parece.

Los comentarios serán moderados. Serán visibles si aportan un argumento constructivo. Si no estás de acuerdo con algún punto, por favor, muestra tus opiniones de manera educada.

Suscríbete

Estamos comprometidos.

Tecnología, personas e impacto positivo.