29 de noviembre de 2010

Generar diagrama de clases a partir de modelos Django

Una útil y sencilla aplicación web para generar diagramas uml, es yUML.

Siguiendo una sintaxis relativamente simple, podemos generar modelos y compartirlos cómodamente.

[Factura]<>1-*>[LineaFactura]

Generaría el siguiente modelo:


Ahora solo queda integrarlo en tu proyecto Django para generar los diagramas de clases a partir de tus modelos. Para ello utilizaremos un comando personalizado para manage.py y una implementación realizada por https://github.com/dzhibas

Nos descargamos el proyecto https://github.com/dzhibas/django-yuml/ y lo integramos en nuestra aplicación. Personalmente me gusta definir los comandos personalizados en una aplicación llamada commands. (Más info. sobre comandos personalizados abajo)

Por lo que tendremos una estructura similar a esta:


Ahora solo queda ejecutar el comando yuml.

Algunos ejemplos:
  • Generar sintaxis yuml para los modelos de una aplicación. (luego podemos copiar en la web y ver el diagrama)
$ ./manage.py yuml <aplicación>
  • Generar imagen o pdf con los modelos de una aplicación
$ ./manage.py yuml <aplicación> -o <file.pdf|file.png>
  • Generar imagen o pdf para todos los modelos de todas las aplicaciones
$ ./manage.py yuml -a -o <file.pdf|file.png>



Otra opción curiosa de yuml es si añadimos la opción --scruffy. Generaremos modelos con un estilo "más cool".


Referencias:
http://yuml.me/
https://github.com/dzhibas/django-yuml/
http://docs.djangoproject.com/en/dev/howto/custom-management-commands/

1 comentario:

  1. Mil gracias por el aporte, es lo más útil que he podido encontrar para hacer ingeniería inversa del código Django.

    Bueno cuando trato de generar mi diagarama UML a un formato, obtengo un error:

    "Error: Error occured while generating .png, HTTP Error 502: Bad Gateway"

    Así que genero el código de yuml direcatmebte con el comando:

    python manage.py yuml mi_aplicacion

    Y luego lo copio en la página http://yuml.me/ y exporto al formato deseado.

    ResponderEliminar