Certificado de Django REST Framework

10h 0m

Domina Django REST Framework y crea aplicaciones API REST completas en Python con este itinerario de desarrollo backend full stack.

Empezar curso

Django REST Framework (DRF) representa una de las herramientas más robustas y versátiles para el desarrollo de APIs REST en Python. Este framework, construido sobre Django, proporciona un conjunto completo de herramientas que permiten crear servicios web escalables y mantenibles con una arquitectura sólida y bien estructurada.

Fundamentos de Django

Django es un framework web de alto nivel que sigue el patrón arquitectónico Model-View-Template (MVT), una variación del conocido patrón MVC. Su filosofía se basa en el principio "Don't Repeat Yourself" (DRY) y en la convención sobre configuración, lo que permite a los desarrolladores crear aplicaciones web complejas de manera eficiente.

La arquitectura de Django se organiza en torno a aplicaciones modulares que pueden reutilizarse entre proyectos. Cada aplicación contiene sus propios modelos, vistas, plantillas y URLs, creando un ecosistema cohesivo pero flexible. Esta modularidad es especialmente valiosa cuando se desarrollan APIs, ya que permite organizar los endpoints de manera lógica y escalable.

El sistema de modelos de Django proporciona una abstracción de alto nivel para interactuar con bases de datos relacionales. A través del Object-Relational Mapping (ORM), los desarrolladores pueden definir estructuras de datos como clases Python, eliminando la necesidad de escribir SQL directamente en la mayoría de casos.

from django.db import models

class Autor(models.Model):
    nombre = models.CharField(max_length=100)
    email = models.EmailField(unique=True)
    fecha_registro = models.DateTimeField(auto_now_add=True)
    
    def __str__(self):
        return self.nombre

class Libro(models.Model):
    titulo = models.CharField(max_length=200)
    isbn = models.CharField(max_length=13, unique=True)
    fecha_publicacion = models.DateField()
    autor = models.ForeignKey(Autor, on_delete=models.CASCADE)
    
    def __str__(self):
        return self.titulo

Entornos y configuración

El desarrollo profesional con Django requiere una gestión adecuada de entornos virtuales. Python Virtual Environment (venv) permite aislar las dependencias de cada proyecto, evitando conflictos entre versiones de librerías y manteniendo un entorno de desarrollo limpio y reproducible.

La configuración de Django se centraliza en el archivo settings.py, donde se definen aspectos cruciales como la conexión a la base de datos, aplicaciones instaladas, middleware, y configuraciones de seguridad. Esta centralización facilita la gestión de diferentes entornos (desarrollo, pruebas, producción) mediante archivos de configuración específicos.

# settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'biblioteca_db',
        'USER': 'usuario_db',
        'PASSWORD': 'contraseña_segura',
        'HOST': 'localhost',
        'PORT': '3306',
        'OPTIONS': {
            'charset': 'utf8mb4',
        },
    }
}

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'rest_framework',
    'biblioteca',  # Aplicación personalizada
]

Modelado de datos

El diseño de modelos en Django va más allá de la simple definición de campos. Las relaciones entre modelos (uno a uno, uno a muchos, muchos a muchos) permiten representar estructuras de datos complejas de manera intuitiva. Django proporciona diferentes tipos de campos que se mapean automáticamente a tipos de datos SQL apropiados.

Las asociaciones entre modelos se implementan mediante claves foráneas y campos de relación especializados. Estas relaciones no solo definen la estructura de la base de datos, sino que también proporcionan una API Python elegante para navegar entre objetos relacionados.

class Categoria(models.Model):
    nombre = models.CharField(max_length=50)
    descripcion = models.TextField(blank=True)

class Libro(models.Model):
    titulo = models.CharField(max_length=200)
    autor = models.ForeignKey(Autor, on_delete=models.CASCADE, related_name='libros')
    categorias = models.ManyToManyField(Categoria, related_name='libros')
    fecha_publicacion = models.DateField()
    disponible = models.BooleanField(default=True)
    
    class Meta:
        ordering = ['titulo']
        verbose_name_plural = 'Libros'

Django REST Framework

Django REST Framework extiende las capacidades de Django para crear APIs REST de manera declarativa y eficiente. DRF proporciona componentes especializados como serializadores, vistas basadas en clases, y sistemas de autenticación y permisos que simplifican significativamente el desarrollo de servicios web.

La arquitectura de DRF se basa en el patrón de separación de responsabilidades, donde cada componente tiene un propósito específico. Los serializadores manejan la conversión entre objetos Python y formatos de intercambio como JSON, las vistas procesan las peticiones HTTP, y los permisos controlan el acceso a los recursos.

Serializadores

Los serializadores constituyen el corazón de DRF, encargándose de convertir instancias de modelos Django en representaciones JSON y viceversa. Estos componentes no solo manejan la serialización, sino que también proporcionan validación de datos y lógica de creación y actualización de objetos.

Un serializador bien diseñado puede incluir campos calculados, validaciones personalizadas y relaciones anidadas. DRF ofrece diferentes tipos de serializadores, desde los básicos hasta los ModelSerializer que se generan automáticamente a partir de modelos Django.

from rest_framework import serializers
from .models import Autor, Libro

class AutorSerializer(serializers.ModelSerializer):
    total_libros = serializers.SerializerMethodField()
    
    class Meta:
        model = Autor
        fields = ['id', 'nombre', 'email', 'fecha_registro', 'total_libros']
        read_only_fields = ['fecha_registro']
    
    def get_total_libros(self, obj):
        return obj.libros.count()

class LibroSerializer(serializers.ModelSerializer):
    autor_nombre = serializers.CharField(source='autor.nombre', read_only=True)
    
    class Meta:
        model = Libro
        fields = ['id', 'titulo', 'isbn', 'fecha_publicacion', 'autor', 'autor_nombre']
    
    def validate_isbn(self, value):
        if len(value) != 13:
            raise serializers.ValidationError("El ISBN debe tener 13 dígitos")
        return value

Vistas y ViewSets

Las vistas en DRF manejan la lógica de procesamiento de peticiones HTTP y generación de respuestas. Los ViewSets proporcionan una abstracción de alto nivel que agrupa operaciones relacionadas en una sola clase, simplificando la implementación de APIs CRUD completas.

Los ViewSets incluyen funcionalidades integradas para paginación, filtrado, ordenación y manejo de errores. Esta aproximación reduce significativamente la cantidad de código necesario para implementar endpoints estándar, mientras mantiene la flexibilidad para personalizar comportamientos específicos.

from rest_framework import viewsets, status
from rest_framework.decorators import action
from rest_framework.response import Response
from django_filters.rest_framework import DjangoFilterBackend

class AutorViewSet(viewsets.ModelViewSet):
    queryset = Autor.objects.all()
    serializer_class = AutorSerializer
    filter_backends = [DjangoFilterBackend]
    filterset_fields = ['nombre']
    
    @action(detail=True, methods=['get'])
    def libros(self, request, pk=None):
        autor = self.get_object()
        libros = autor.libros.all()
        serializer = LibroSerializer(libros, many=True)
        return Response(serializer.data)

class LibroViewSet(viewsets.ModelViewSet):
    queryset = Libro.objects.select_related('autor')
    serializer_class = LibroSerializer
    
    def perform_create(self, serializer):
        serializer.save()
    
    def perform_update(self, serializer):
        serializer.save()

Integración con bases de datos

La integración con MySQL en Django requiere configuración específica del motor de base de datos y consideraciones de rendimiento. MySQL ofrece características avanzadas como índices, transacciones y procedimientos almacenados que pueden aprovecharse desde Django para optimizar el rendimiento de las APIs.

La configuración de MySQL incluye aspectos como el conjunto de caracteres, zona horaria, y opciones de conexión que afectan el comportamiento de la aplicación. DRF hereda todas estas capacidades, permitiendo crear APIs que manejen grandes volúmenes de datos de manera eficiente.

# Configuración optimizada para MySQL
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'api_biblioteca',
        'USER': 'api_user',
        'PASSWORD': 'secure_password',
        'HOST': 'localhost',
        'PORT': '3306',
        'OPTIONS': {
            'charset': 'utf8mb4',
            'use_unicode': True,
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
        },
    }
}

# Modelo con índices optimizados para MySQL
class Libro(models.Model):
    titulo = models.CharField(max_length=200, db_index=True)
    isbn = models.CharField(max_length=13, unique=True)
    fecha_publicacion = models.DateField(db_index=True)
    
    class Meta:
        indexes = [
            models.Index(fields=['titulo', 'fecha_publicacion']),
            models.Index(fields=['autor', 'disponible']),
        ]

Django REST Framework representa una solución integral para el desarrollo de APIs modernas, combinando la solidez de Django con herramientas especializadas para servicios web. Su arquitectura modular y extensible permite crear desde APIs simples hasta sistemas complejos de microservicios, manteniendo siempre un código limpio y mantenible.

Empezar curso

Otros cursos de programación con certificado

Supera todos los retos de Django REST Framework y obtén estos certificados de superación para mejorar tu currículum y tu empleabilidad.

Tecnologías que aprenderás

Django REST Framework

Al finalizar este curso obtendrás

Certificado de superación en Django REST Framework

Certificado de superación en Django REST Framework

Tras completar todas las lecciones y ejercicios del curso Django REST Framework se te genera un enlace con tu certificado para que lo puedas descargar o compartir directamente en cualquier plataforma, siempre accesible.

Accede a todas certificaciones