Introducción a Django Framework y Django Rest Framework
¿Qué es Django?
Django es un framework web de alto nivel desarrollado en Python que se utiliza para crear aplicaciones web robustas y escalables.
Algunas de las características que hacen que Django sea una opción popular para el desarrollo web son:
Productividad: Django proporciona un conjunto de herramientas y características incorporadas que permiten a los desarrolladores crear aplicaciones web de manera más rápida y eficiente.
Seguridad: Django incluye características de seguridad integradas, como la protección contra ataques de inyección SQL y protección contra ataques CSRF (Cross-Site Request Forgery).
ORM (Mapeo Objeto-Relacional): Django incluye su propio ORM que permite interactuar con la base de datos utilizando objetos Python en lugar de escribir consultas SQL directamente.
Administración de Contenido: Django proporciona una interfaz de administración fácil de usar que permite a los administradores del sitio gestionar contenido y datos sin necesidad de conocimientos técnicos.
Escalabilidad: Django está diseñado para ser escalable y manejar aplicaciones web de cualquier tamaño.
Arquitectura de Django
Django sigue una arquitectura de diseño llamada MTV (Modelo, Plantilla, Vista), que es una variación del patrón MVC (Modelo-Vista-Controlador). Los componentes clave de MTV son:
Modelo: Representa la estructura de la base de datos y define cómo se almacenan y recuperan los datos.
Plantilla: Define la presentación de la aplicación web y cómo se muestra la información al usuario.
Vista: Controla la lógica de negocio y maneja las solicitudes entrantes del usuario.
Django utiliza URLconf (Configuración de URL) para asignar las URL a las vistas correspondientes. Esto permite que las vistas se activen cuando un usuario accede a una URL específica en la aplicación. Componentes Clave de Django
Modelos: Los modelos en Django definen la estructura de la base de datos. Cada modelo se traduce en una tabla en la base de datos y define los campos y relaciones entre los datos.
Vistas: Las vistas en Django son responsables de procesar las solicitudes entrantes y devolver respuestas. Pueden acceder a los datos del modelo y renderizar plantillas para mostrar información al usuario.
Plantillas: Las plantillas son archivos HTML que definen la presentación de las páginas web en Django. Pueden incluir etiquetas y filtros para mostrar dinámicamente datos desde las vistas.
Modelos en Django
Los modelos en Django definen la estructura de la base de datos y cómo se almacenan los datos. Cada modelo se define como una clase de Python que hereda de models.Model. Dentro de la clase, se definen los campos que representan las columnas de la tabla de la base de datos.
from django.db import models
class Producto(models.Model):
= models.CharField(max_length=100)
nombre = models.DecimalField(max_digits=5, decimal_places=2)
precio = models.TextField() descripcion
En este ejemplo, hemos creado un modelo llamado Producto con tres campos: nombre, precio y descripcion.
Vistas en Django
Las vistas en Django son funciones de Python que procesan las solicitudes entrantes y devuelven respuestas. Utilizan los modelos para acceder a los datos y pueden renderizar plantillas para mostrar información.
from django.shortcuts import render
from .models import Producto
def lista_productos(request):
= Producto.objects.all()
productos return render(request, 'lista_productos.html', {'productos': productos})
En esta vista, recuperamos todos los productos de la base de datos y los pasamos a una plantilla llamada lista_productos.html para su representación. Plantillas en Django
Las plantillas en Django son archivos HTML que definen cómo se presenta la información. Utilizan etiquetas y filtros para acceder a datos desde las vistas y mostrarlos en la página.
<!DOCTYPE html>
<html>
<head>
<title>Lista de Productos</title>
</head>
<body>
<h1>Lista de Productos</h1>
<ul>
{% for producto in productos %}<li>{{ producto.nombre }} - ${{ producto.precio }}</li>
{% endfor %}</ul>
</body>
</html>
En esta plantilla, utilizamos la etiqueta {% for producto in productos %} para iterar sobre la lista de productos y mostrar sus nombres y precios. Creación de una Aplicación en Django
Creación de una Aplicación Django
Django permite dividir una aplicación web en múltiples aplicaciones más pequeñas, cada una con su propio conjunto de modelos, vistas y plantillas. Para crear una aplicación en Django, puedes utilizar el siguiente comando:
python manage.py startapp mi_aplicacion .
Esto creará una estructura de carpetas y archivos para tu nueva aplicación. Luego, puedes registrar la aplicación en la configuración del proyecto.
Definición de Rutas y Vistas
Las rutas en Django se definen en el archivo urls.py de la aplicación. Puedes asignar URL a funciones de vista específicas.
from django.urls import path
from . import views
= [
urlpatterns 'productos/', views.lista_productos, name='lista_productos'),
path(# Otras rutas...
]
En este ejemplo, hemos asignado la URL /productos/ a la vista lista_productos que creamos anteriormente.
Administración y Base de Datos en Django
Interfaz de Administración de Django
Django proporciona una potente interfaz de administración que facilita la gestión de datos y contenido. Esta interfaz se genera automáticamente a partir de los modelos definidos en la aplicación.
Para poder utilizar nustros modelos en la administración debemos registrarlos en el archivo admin.py de la aplicación.
from django.contrib import admin
from .models import Producto
admin.site.register(Producto)
Los administradores del sitio pueden utilizar la interfaz para:
- Agregar, editar y eliminar registros de la base de datos.
- Gestionar usuarios y permisos.
- Realizar otras tareas administrativas.
ORM de Django
El ORM (Mapeo Objeto-Relacional) de Django permite interactuar con la base de datos utilizando objetos Python en lugar de escribir consultas SQL directamente. Esto simplifica la gestión de datos y hace que el código sea más legible.
Por ejemplo, para recuperar todos los productos de la base de datos, puedes hacer lo siguiente:
= Producto.objects.all() productos
Esto devuelve una lista de objetos Producto que representan los registros de la tabla de productos en la base de datos.
Ejercicios Prácticos
Ejercicio 1: Creación de un Modelo en Django
- Crear un modelo en Django para representar una entidad de su elección (por ejemplo, libros, películas, tareas, etc.).
- Definir al menos tres campos para el modelo.
- Ejecutar las migraciones para aplicar el modelo a la base de datos.
# models.py
from django.db import models
class Libro(models.Model):
= models.CharField(max_length=100)
titulo = models.CharField(max_length=50)
autor = models.IntegerField()
año_publicacion
def __str__(self):
return self.titulo
Después de definir el modelo, debes crear y aplicar las migraciones utilizando los siguientes comandos:
python manage.py makemigrations
python manage.py migrate
Ejercicio 2: Creación de una Vista y Plantilla en Django
- Crear una vista en Django que recupere datos de su modelo y los pase a una plantilla.
- Crear una plantilla HTML que muestre los datos en una página web.
- Configurar una URL para acceder a la vista.
# views.py
from django.shortcuts import render
from .models import Libro
def lista_libros(request):
= Libro.objects.all()
libros return render(request, 'myapp/lista_libros.html', {'libros': libros})
<!-- lista_libros.html -->
<!DOCTYPE html>
<html>
<head>
<title>Lista de Libros</title>
</head>
<body>
<h1>Lista de Libros</h1>
<ul>
{% for libro in libros %}<li>{{ libro.titulo }} - {{ libro.autor }} ({{ libro.año_publicacion }})</li>
{% empty %}<li>No hay libros disponibles.</li>
{% endfor %}</ul>
</body>
</html>
# urls.py
from django.urls import path
from . import views
= [
urlpatterns 'libros/', views.lista_libros, name='lista_libros'),
path( ]
Ejercicio 3: Uso de la Interfaz de Administración de Django
- Registrar el modelo creado en el Ejercicio 1 en la interfaz de administración de Django.
- Utilizar la interfaz de administración para agregar al menos dos registros de ejemplo.
Primero, asegúrate de haber registrado el modelo Libro en el archivo admin.py de tu aplicación:
# admin.py
from django.contrib import admin
from .models import Libro
admin.site.register(Libro)
Luego, puedes acceder a la interfaz de administración de Django en http://tu-sitio/admin/ para agregar registros de ejemplo.
Ejercicio 4: Uso del ORM de Django
- Escribir código Python para recuperar datos de su modelo utilizando el ORM de Django.
- Mostrar los datos recuperados en la consola o en una página web.
Puedes utilizar el siguiente código para recuperar y mostrar datos de libros utilizando el ORM de Django en una vista:
# views.py
from django.shortcuts import render
from .models import Libro
def lista_libros(request):
= Libro.objects.all()
libros return render(request, 'lista_libros.html', {'libros': libros})
Este código recupera todos los registros de la base de datos y los pasa a la plantilla para su representación.
Estos ejercicios prácticos ayudarán a los estudiantes a aplicar los conceptos de modelos, vistas y plantillas en Django, así como a familiarizarse con la interfaz de administración y el ORM.
API de libros utilizando Django Rest Framework (DRF).
Para configurar y desarrollar este proyecto es necesario que realicemos los siguientes pasos:
Paso 1: Configuración Inicial
Asegúrate de tener Django Rest Framework instalado en tu entorno virtual. Puedes instalarlo usando pip:
pip install djangorestframework
Crea un nuevo proyecto de Django si aún no lo has hecho:
django-admin startproject proyecto_api
Luego, crea una nueva aplicación dentro del proyecto:
cd proyecto_api
python manage.py startapp api
Agrega rest_framework y api a la lista de aplicaciones en settings.py:
= [
INSTALLED_APPS # ...
'rest_framework',
'api',
]
Paso 2: Modelado de Datos
Define el modelo de datos para los libros en el archivo api/models.py. Aquí tienes un ejemplo simple:
from django.db import models
class Libro(models.Model):
= models.CharField(max_length=100)
titulo = models.CharField(max_length=100)
autor = models.PositiveIntegerField()
año_publicacion
def __str__(self):
return self.titulo
Luego, crea y aplica las migraciones para este modelo:
python manage.py makemigrations
python manage.py migrate
Paso 3: Serialización
Crea un serializador en el archivo api/serializers.py para convertir los objetos de modelo en datos JSON:
from rest_framework import serializers
from .models import Libro
class LibroSerializer(serializers.ModelSerializer):
class Meta:
= Libro
model = ['id', 'titulo', 'autor', 'año_publicacion'] fields
Paso 4: Vistas y Rutas
En api/views.py, define las vistas basadas en clases utilizando Django Rest Framework:
from rest_framework import generics
from .models import Libro
from .serializers import LibroSerializer
class ListaLibros(generics.ListCreateAPIView):
= Libro.objects.all()
queryset = LibroSerializer
serializer_class
class DetalleLibro(generics.RetrieveUpdateDestroyAPIView):
= Libro.objects.all()
queryset = LibroSerializer serializer_class
Luego, configura las rutas en api/urls.py:
from django.urls import path
from .views import ListaLibros, DetalleLibro
= [
urlpatterns 'libros/', ListaLibros.as_view(), name='lista_libros'),
path('libros/<int:pk>/', DetalleLibro.as_view(), name='detalle_libro'),
path( ]
Paso 5: Configuración de URLs Principales
En el archivo proyecto_api/urls.py, incluye las rutas de la aplicación de API:
from django.contrib import admin
from django.urls import path, include
= [
urlpatterns 'admin/', admin.site.urls),
path('api/', include('api.urls')),
path( ]
Paso 6: Ejecutar el Servidor
Inicia el servidor de desarrollo:
python manage.py runserver
Paso 7: Prueba de la API
Ahora, puedes acceder a la API en las siguientes URL:
- Lista de libros: http://localhost:8000/api/libros/
- Detalle de libro: http://localhost:8000/api/libros/id/
En el Detalle del Libro, es necesario cambiar el id por el número de identificación del libro que se desea consultar.
Puedes utilizar herramientas como Postman, Thunder Cliente o Rappid API Client o simplemente un navegador web para probar las rutas y realizar operaciones CRUD en la API de libros.
Este proyecto proporciona una base sólida para desarrollar una API de libros con Django Rest Framework. Puedes personalizarlo según tus necesidades y agregar autenticación u otras características según sea necesario.
Conclusiones
En esta unidad, hemos explorado Django y Django Rest Framework (DRF), dos poderosas herramientas para el desarrollo web con Python. Aquí están algunas conclusiones clave:
Django es un framework web de alto nivel que sigue el principio “baterías incluidas”. Proporciona una estructura sólida y conveniente para desarrollar aplicaciones web, incluyendo la administración de bases de datos, la autenticación de usuarios y un sistema de rutas robusto.
Django Rest Framework (DRF) es una extensión de Django que simplifica la creación de API REST. Proporciona clases y herramientas que permiten definir fácilmente puntos finales de API y serializar datos de manera eficiente.
Algunas ventajas de utilizar Django incluyen su gran comunidad, documentación extensa y la capacidad de construir aplicaciones web rápidamente.
DRF es ideal para crear API RESTful de manera rápida y eficiente. Proporciona una capa de serialización que facilita la conversión de objetos de modelo en datos JSON.
Recomendaciones
Aprender la Documentación: Tanto Django como DRF tienen documentación detallada. Aprovecha estos recursos para comprender las funcionalidades y las mejores prácticas.
Practicar: La práctica es clave para dominar estas herramientas. Crea proyectos pequeños para aplicar lo que has aprendido.
Comunidad: La comunidad de Django es activa y solidaria. Únete a foros y grupos de discusión para obtener ayuda cuando la necesites.
Seguridad: Django tiene características de seguridad incorporadas, pero debes estar atento a las mejores prácticas de seguridad web al desarrollar aplicaciones.