Cookiecutter: cómo iniciar y configurar un proyecto Django en tiempo récord

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:

  • Todos sus directorios.
  • Ficheros necesarios.
  • Carpetas.
  • Módulos.
  • Configuraciones de usuario.
  • Configuraciones de aplicación.
  • Dependencias.
  • Opciones de despliegue.
  • Entornos de testing y módulos para debug.
  • Calidad de código.
  • Envío de emails para local y producción.
  • Incluye compiladores de Javascript.
  • Opciones para trabajar con contenedores.
  • Y un largo etcétera.

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:

  • Soporte para Windows.
  • Compatible con Python 3.6 y Django 2.0.
  • PostgreSQL: 9.3, 9.4, 9.5, 9.6, 10.1, 10.2, 10.3.
  • Elegir entre Unitest o Py.test.
  • Instrucciones y preparación para desplegar en PythonAnyWhere ó Heroku.
  • Nombre de dominio.
  • Soporte para Docker.
  • Soporte para AWS S3 o Whitenoise.
  • Mailing usando Anymail o Mailgun, y Mailhog para local.
  • Soporte para Grunt o Gulp.
  • Modelos, vistas y plantillas Django con estructura ready-to-go.
  • Registro y gestión de SSO con django-allauth.
  • Configuración secure-by-default y optimizada para local y producción.
  • Bootstrap v4.
  • Preparado para Celery y Flower.
  • Reparado para Sentry.
  • Si se quiere usar django-compressor para los estáticos.
  • Generación de README.
  • Elegir configuraciones entre varios IDEs, como por ejemplo PyCharm.
  • Elegir entre licencias: MIT, BSD, GPLv3, Apache Software License 2.0 o cerrado.
  • Además de opciones para continuous integration,como por ejemplo Travis CI.
  • También pregunta si se quiere configurar el proyecto con opciones de debug.
  • Incluye linterns de código como Flake y PEP8.
  • Documentación del proyecto autogenerada.
  • Control de dependencias y módulos con pip.
  • Configuraciones para control de versiones.
  • Nombres de los autores.
  • Descripción el proyectos.
  • Opciones para slugs.
  • Dominio.
  • Zona horaria y geográfica.
  • Email/s para administración.
  • Versión inicial.

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:

  • $ mkvirtualenv -p /usr/bin/python3.5 <nombre-entorno-virtual> para crear el entorno virtual y con Python 3 que es la versión recomendada.
  • $ pip install “cookiecutter>=1.4.0”
  • $ cookiecutter https://github.com/pydanny/cookiecutter-django aquí se ejecuta la herramienta contra el repositorio.
  • $ pip install -r requirements/local.txt instalamos el resto de dependencias.
  • $ createdb shop para crear la base de datos. El nombre debe ser igual que el slug elegido, en el ejemplo del vídeo es “shop”.
  • $ python manage.py migrate para crear las migraciones del esquema de la base de datos referente a todo lo que Cookiecutter trae de serie.
  • ¡Y listo! Ya podríamos hacer $ python manage.py runserver y tener Django ejecutándose.

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

Soy Ingeniero en Informática especializado en desarrollo con Django, apasionado por la tecnología, en especial de Linux, Vim y Python. Cuando puedo hago escalada, snowboard o juego al ajedrez.

Ver toda la actividad de Pedro Cordero

Escribe un comentario