Django: Django REST Framework

Django
Django
Actualizado: 01/07/2025

¡Desbloquea el curso completo!

IA
Ejercicios
Certificado
Entrar

Django REST Framework

Django REST Framework (DRF) es una biblioteca que extiende las capacidades de Django para crear APIs REST de forma sencilla y eficiente. Mientras que Django está diseñado principalmente para aplicaciones web tradicionales que renderizan HTML, DRF nos permite construir servicios web que intercambian datos en formato JSON, facilitando la comunicación entre aplicaciones frontend y backend.

¿Qué es una API REST?

Una API REST es un conjunto de reglas que permite a diferentes aplicaciones comunicarse entre sí a través de HTTP. En lugar de devolver páginas HTML completas, una API REST devuelve datos estructurados (normalmente en JSON) que pueden ser consumidos por aplicaciones móviles, sitios web con JavaScript, o cualquier otro cliente que necesite acceder a la información.

Los principios fundamentales de REST incluyen el uso de métodos HTTP estándar:

  • GET: Para obtener datos
  • POST: Para crear nuevos recursos
  • PUT/PATCH: Para actualizar recursos existentes
  • DELETE: Para eliminar recursos

Instalación y configuración inicial

Para comenzar a trabajar con Django REST Framework, necesitamos instalarlo en nuestro proyecto Django existente:

pip install djangorestframework

Una vez instalado, debemos agregarlo a la lista de aplicaciones instaladas en settings.py:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',  # Agregamos DRF
    'tu_app',
]

Serializadores: el corazón de DRF

Guarda tu progreso

Inicia sesión para no perder tu progreso y accede a miles de tutoriales, ejercicios prácticos y nuestro asistente de IA.

Progreso guardado
Asistente IA
Ejercicios
Iniciar sesión gratis

Más de 25.000 desarrolladores ya confían en CertiDevs

Los serializadores son componentes fundamentales en DRF que se encargan de convertir los datos de Django (como instancias de modelos) en formatos que pueden ser fácilmente renderizados en JSON, y viceversa. Funcionan de manera similar a los formularios de Django, pero están diseñados específicamente para APIs.

Supongamos que tenemos un modelo simple de Producto:

# models.py
from django.db import models

class Producto(models.Model):
    nombre = models.CharField(max_length=100)
    precio = models.DecimalField(max_digits=10, decimal_places=2)
    descripcion = models.TextField()
    fecha_creacion = models.DateTimeField(auto_now_add=True)
    
    def __str__(self):
        return self.nombre

Para crear una API que maneje este modelo, necesitamos un serializador:

# serializers.py
from rest_framework import serializers
from .models import Producto

class ProductoSerializer(serializers.ModelSerializer):
    class Meta:
        model = Producto
        fields = ['id', 'nombre', 'precio', 'descripcion', 'fecha_creacion']

El ModelSerializer es una clase especial que automáticamente genera campos de serialización basados en el modelo de Django, similar a como ModelForm funciona para formularios.

Vistas basadas en clases

Django REST Framework proporciona vistas especializadas que simplifican enormemente la creación de endpoints de API. Las vistas basadas en clases más comunes incluyen:

ViewSets

Los ViewSets agrupan la lógica relacionada para manejar múltiples acciones sobre un recurso:

# views.py
from rest_framework import viewsets
from rest_framework.response import Response
from .models import Producto
from .serializers import ProductoSerializer

class ProductoViewSet(viewsets.ModelViewSet):
    queryset = Producto.objects.all()
    serializer_class = ProductoSerializer

Un ModelViewSet proporciona automáticamente las siguientes acciones:

  • list(): GET /productos/ - Lista todos los productos
  • create(): POST /productos/ - Crea un nuevo producto
  • retrieve(): GET /productos/{id}/ - Obtiene un producto específico
  • update(): PUT /productos/{id}/ - Actualiza un producto completo
  • partial_update(): PATCH /productos/{id}/ - Actualiza parcialmente un producto
  • destroy(): DELETE /productos/{id}/ - Elimina un producto

Configuración de URLs

Para conectar nuestras vistas con las URLs, DRF proporciona routers que automáticamente generan los patrones de URL:

# urls.py
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import ProductoViewSet

router = DefaultRouter()
router.register(r'productos', ProductoViewSet)

urlpatterns = [
    path('api/', include(router.urls)),
]

Esta configuración genera automáticamente todas las URLs necesarias para nuestro CRUD completo de productos.

Respuestas JSON automáticas

Una de las ventajas principales de DRF es que maneja automáticamente la serialización a JSON. Cuando un cliente hace una petición a nuestra API, DRF:

  • Deserializa los datos JSON entrantes en objetos Python
  • Procesa la lógica de negocio
  • Serializa la respuesta de vuelta a JSON

Por ejemplo, una petición GET a /api/productos/ devolvería:

[
    {
        "id": 1,
        "nombre": "Laptop Gaming",
        "precio": "1299.99",
        "descripcion": "Laptop para gaming de alta gama",
        "fecha_creacion": "2024-01-15T10:30:00Z"
    },
    {
        "id": 2,
        "nombre": "Mouse Inalámbrico",
        "precio": "29.99",
        "descripcion": "Mouse ergonómico inalámbrico",
        "fecha_creacion": "2024-01-16T14:20:00Z"
    }
]

Validación de datos

Los serializadores también manejan la validación de datos de entrada, similar a como lo hacen los formularios de Django:

class ProductoSerializer(serializers.ModelSerializer):
    class Meta:
        model = Producto
        fields = ['id', 'nombre', 'precio', 'descripcion', 'fecha_creacion']
    
    def validate_precio(self, value):
        if value <= 0:
            raise serializers.ValidationError("El precio debe ser mayor que cero")
        return value
    
    def validate(self, data):
        if len(data['nombre']) < 3:
            raise serializers.ValidationError("El nombre debe tener al menos 3 caracteres")
        return data

Esta validación automática asegura que los datos cumplan con nuestras reglas de negocio antes de ser guardados en la base de datos.

Django REST Framework transforma Django en una plataforma completa para el desarrollo de APIs modernas, manteniendo la simplicidad y elegancia que caracteriza al framework, mientras proporciona todas las herramientas necesarias para crear servicios web robustos y escalables.

Completa Django y certifícate

Únete a nuestra plataforma y accede a miles de tutoriales, ejercicios prácticos, proyectos reales y nuestro asistente de IA personalizado para acelerar tu aprendizaje.

Asistente IA

Resuelve dudas al instante

Ejercicios

Practica con proyectos reales

Certificados

Valida tus conocimientos

Más de 25.000 desarrolladores ya se han certificado con CertiDevs

⭐⭐⭐⭐⭐
4.9/5 valoración