En este artículo, aprenderemos cómo crear una aplicación CRUD básica utilizando el framework Django. CRUD es un acrónimo que significa Create, Read, Update y Delete, y se refiere a las operaciones básicas que se pueden realizar en una base de datos.
Django es un framework de desarrollo web de alto nivel y de código abierto, escrito en Python. Proporciona una estructura y un conjunto de herramientas que permiten a los desarrolladores crear aplicaciones web de manera rápida y eficiente.
Antes de comenzar a trabajar en nuestra aplicación Django, es recomendable configurar un entorno virtual para evitar conflictos con otras dependencias del sistema. Para ello, podemos utilizar la herramienta virtualenv
. A continuación, se muestra cómo crear y activar un entorno virtual:
$ virtualenv myenv
$ source myenv/bin/activate
Una vez que tenemos nuestro entorno virtual activado, podemos instalar Django utilizando pip
, el gestor de paquetes de Python. Ejecute el siguiente comando para instalar la última versión estable de Django:
$ pip install django
Después de haber instalado Django, podemos crear un nuevo proyecto utilizando el siguiente comando:
$ django-admin startproject myproject
Esto creará un directorio llamado myproject
con la estructura de archivos y directorios necesarios para nuestro proyecto.
Dentro de nuestro proyecto Django, podemos crear una nueva aplicación utilizando el siguiente comando:
$ cd myproject
$ python manage.py startapp myapp
Esto creará un directorio llamado myapp
dentro de nuestro proyecto, que contendrá los archivos y directorios necesarios para nuestra aplicación.
El modelo de datos es una representación de la estructura y los campos de nuestra base de datos. En este ejemplo, crearemos un modelo de datos simple para una lista de tareas. Abra el archivo models.py
dentro de la aplicación myapp
y agregue el siguiente código:
from django.db import models
class Task(models.Model):
title = models.CharField(max_length=200)
description = models.TextField()
completed = models.BooleanField(default=False)
def __str__(self):
return self.title
En este código, hemos definido un modelo Task
con tres campos: title
, description
y completed
. El campo title
es de tipo CharField
, que representa una cadena de texto con una longitud máxima de 200 caracteres. El campo description
es de tipo TextField
, que representa un campo de texto sin límite de longitud. El campo completed
es de tipo BooleanField
, que representa un valor booleano (verdadero o falso). Además, hemos definido un método __str__
que devuelve el título de la tarea.
Las migraciones son archivos que contienen las instrucciones necesarias para crear o modificar la estructura de la base de datos según los cambios realizados en los modelos de datos. Para generar las migraciones, ejecute el siguiente comando:
$ python manage.py makemigrations
Una vez generadas las migraciones, aplíquelas a la base de datos utilizando el siguiente comando:
$ python manage.py migrate
Esto creará las tablas necesarias en la base de datos según la estructura definida en los modelos de datos.
Las vistas son las funciones o clases que se encargan de procesar las solicitudes web y devolver una respuesta al cliente. En nuestro caso, crearemos cuatro vistas para realizar las operaciones CRUD básicas: listar todas las tareas, crear una nueva tarea, actualizar una tarea existente y eliminar una tarea. Abra el archivo views.py
dentro de la aplicación myapp
y agregue el siguiente código:
from django.shortcuts import render, redirect
from .models import Task
from .forms import TaskForm
def task_list(request):
tasks = Task.objects.all()
return render(request, 'myapp/task_list.html', {'tasks': tasks})
def task_create(request):
form = TaskForm(request.POST or None)
if form.is_valid():
form.save()
return redirect('task_list')
return render(request, 'myapp/task_form.html', {'form': form})
def task_update(request, pk):
task = Task.objects.get(pk=pk)
form = TaskForm(request.POST or None, instance=task)
if form.is_valid():
form.save()
return redirect('task_list')
return render(request, 'myapp/task_form.html', {'form': form})
def task_delete(request, pk):
task = Task.objects.get(pk=pk)
if request.method == 'POST':
task.delete()
return redirect('task_list')
return render(request, 'myapp/task_confirm_delete.html', {'task': task})
En este código, hemos importado el modelo Task
y el formulario TaskForm
definidos anteriormente. Luego, hemos creado cuatro funciones de vista: task_list
para listar todas las tareas, task_create
para crear una nueva tarea, task_update
para actualizar una tarea existente y task_delete
para eliminar una tarea.
Las plantillas HTML son archivos que contienen el código HTML que se utilizará para renderizar las vistas. En nuestro caso, crearemos tres plantillas: task_list.html
para listar las tareas, task_form.html
para crear y actualizar tareas, y task_confirm_delete.html
para confirmar la eliminación de una tarea. Cree un directorio llamado templates
dentro de la aplicación myapp
, y dentro de ese directorio, cree otro directorio llamado myapp
. A continuación, cree los archivos HTML correspondientes con el siguiente contenido:
task_list.html:
{% for task in tasks %}
<h2>{{ task.title }}</h2>
<p>{{ task.description }}</p>
<p>{{ task.completed }}</p>
<a href="{% url 'task_update' task.pk %}">Editar</a>
<a href="{% url 'task_delete' task.pk %}">Eliminar</a>
{% empty %}
<p>No hay tareas disponibles.</p>
{% endfor %}
task_form.html:
<form method="POST">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Guardar</button>
</form>
task_confirm_delete.html: