Formulario de Contacto y envío de emails con Django
Formulario de Contacto y envío de emails con Django

En este tutorial vamos a aprender a crear una aplicación de crud con Django y Mysql, veremos cómo conectar con Mysql, crear modelos, migraciones, formularios de creación y edición, mensajes flash y las rutas.

Para este ejemplo vamos a crear un crud de Posts, a través de clases haremos la validación de nuestro formulario, también veremos cómo renderizar nuestros formularios utilizando las clases de bootstrap, así estará más personalizado.

Si tienes dudas con Python o Django te invito a revisar los siguientes tutoriales.

Crear una aplicación en Django

Lo primero que debemos hacer es crear nuestra aplicación, para ello ejecuta el siguiente comando en tu proyecto.


El anterior comando habrá creado la aplicación unodepiera, ahora vamos a llevar a cabo la configuración del proyecto, para ello abrimos el archivo settings.py y vamos modificando poco a poco, primero registramos nuestra aplicación.

Conectar con Mysql en Django

Ahora debemos modificar los valores de DATABASES para definir nuestra conexión con mysql.


En este caso yo estoy utilizando la conexión de MAMP en mac, lo más normal es utilizar localhost o nada en la propiedad HOST, recuerda crear tu base de datos.

Crear modelos en Django

Para crear nuestro modelo Post en Django simplemente abre el archivo unodepiera/models.py y reemplaza el código por el siguiente.


El modelo post nos permitirá crear la tabla unodepiera_post, para ello necesitamos procesar las migraciones, pero es tan sencillo como ejecutar los dos siguientes comandos en la terminal, creamos las migraciones y después las ejecutamos.

Crear formularios en Django

Ahora que tenemos nuestra base de datos creada con la tabla posts y el proyecto configurado vamos a crear la clase que represente a nuestro formulario de Post, es tan sencillo como crear un archivo nuevo en unodepiera llamado forms.py con el siguiente código.


La clase Meta nos facilita la vida enormemente, ya que simplemente diciéndole el modelo que debe reprensentar, los campos (fields) y los widgets con los atributos de cada campo tenemos un formulario listo para crear y editar que podemos pintar con una sola línea de código.

Definir las urls de nuestro crud

Ahora podemos seguir con la definición de las rutas que vamos a necesitar para crear un crud con Django, para ello simplemente abre el archivo urls.py de tu proyecto y añade las siguientes urls.


Con las anteriores líneas tenemos disponibles las siguientes urls.

  • http://127.0.0.1:8000/posts/list/
  • http://127.0.0.1:8000/posts/add/
  • http://127.0.0.1:8000/posts/:postid/
  • http://127.0.0.1:8000/posts/:postid/delete/

Plantilla maestra con Django

Ya que vamos a tener una template común en nuestra aplicación vamos a crear una plantilla maestra, para ello simplemente crea un archivo en el directorio templates llamado master.html con el siguiente código.


Gracias a los bloques poderemos sobreescribir la template reutilizando código en cada sección.

Formulario de Posts

Para crear la template que contenga nuestro formulario de posts simplemente crea un nuevo archivo llamado form_posts en el directorio templates y añade el siguiente código.

Template para listar los posts

Ahora solo nos queda crear la template donde mostremos todos los posts y las mensajes flash que vayamos creando a medida que creemos o actualicemos datos, para crear la template simplemente crea un archivo llamado posts.html y añade el siguiente código.


Finalmente solo nos resta definir los métodos que apliquen la lógica de nuestra aplicación, y eso lo vamos a hacer en unodepiera/views.py, simplemente tendremos 4 métodos, posts (para listar los posts), add_post(para crear un nuevo post), update_post(para actualizar un post) y delete_post(para eliminar un post), los dos últimos recibirán la id del post por la url.

Para que todo funcione simplemente añade el siguiente código.


Creo que el código anterior se entiende bastante, con messages.add_message creamos “sesiones flash”, con form.save() en cualquier caso guardamos o actualizamos el post dependiendo si existe o no, con HttpResponseRedirect simplemente hacemos una redirección, con Post.objects.all() obtenemos todos los posts para tenerlos listos en la template, con el método render renderizamos una template y finalmente con get_object_or_404(Post, id=postid) obtenemos un post por su id o en su defecto mostramos una página de error 404, así de sencillo.

Llegados a este punto solo te queda levantar el servidor y jugar, así de sencillo es crear un crud con Django y Mysql.