Centro de Innovación, la Agroindustria y la Aviación
Instructor: Alexander Patiño Londoño
El framework web más poderoso de Python. Construye aplicaciones escalables, seguras y profesionales con las mejores prácticas del desarrollo moderno.
Django es un framework web de alto nivel escrito en Python que fomenta el desarrollo rápido y el diseño limpio y pragmático.
Creado por desarrolladores experimentados, Django se encarga de gran parte de las complejidades del desarrollo web, permitiéndote concentrarte en escribir tu aplicación sin necesidad de reinventar la rueda. Es gratuito y de código abierto.
Protección contra SQL injection, XSS, CSRF y clickjacking por defecto.
Desde startups hasta empresas Fortune 500, Django escala con tus necesidades.
Desde CMS hasta redes sociales, sitios científicos y aplicaciones financieras.
Django nace como framework interno en el periódico Lawrence Journal-World de Kansas, creado por Adrian Holovaty y Simon Willison para manejar sitios web de noticias con deadlines ajustados.
Django se libera al público como proyecto open source bajo licencia BSD, marcando el inicio de una comunidad global de desarrolladores.
Primera versión estable con garantía de compatibilidad hacia atrás, estableciendo Django como framework maduro y confiable para producción.
Introducción del soporte para Python 3, modelos de usuario personalizables y mejoras significativas en el ORM que modernizaron el framework.
Primera versión con soporte a largo plazo (LTS), ofreciendo estabilidad y actualizaciones de seguridad por 3 años. Establece el modelo LTS que continúa hasta hoy.
Se elimina el soporte para Python 2, marcando un paso decisivo hacia la modernización completa del framework y adoptando las mejores características de Python 3.
Introducción del soporte ASGI para aplicaciones asíncronas, permitiendo WebSockets, HTTP/2 y operaciones concurrentes de alto rendimiento.
Última versión mayor con mejoras significativas de rendimiento, seguridad mejorada, y nuevas características para el desarrollo web moderno. Python 3.10+ requerido.
Django sigue el patrón Model-Template-View (MTV), una variación del MVC tradicional
Define la estructura de datos y la lógica de negocio. Cada modelo mapea a una tabla de la base de datos.
class Article(models.Model):
title = models.CharField()
content = models.TextField()
Maneja la presentación de datos. Separa el diseño HTML de la lógica de Python.
<h1>{{ article.title }}</h1>
<p>{{ article.content }}</p>
Contiene la lógica que procesa las peticiones y devuelve respuestas.
def article_detail(request, id):
article = Article.objects.get(id=id)
return render(request, 'detail.html')
Antes de instalar Django, asegúrate de tener Python instalado en tu sistema.
python --version
Django 5.0 requiere Python 3.10 o superior
Es una buena práctica usar entornos virtuales para aislar las dependencias.
python -m venv myenv
source myenv/bin/activate # Linux/Mac
myenv\Scripts\activate # Windows
Usa pip para instalar Django en tu entorno virtual.
pip install django
Para una versión específica: pip install django==5.0
Crea tu primer proyecto Django y ejecuta el servidor de desarrollo.
django-admin startproject miproyecto
cd miproyecto
python manage.py runserver
Visita http://127.0.0.1:8000 en tu navegador
Aprende creando un CRUD completo paso a paso: desde la instalación hasta el despliegue de tu primera aplicación web funcional
Antes de comenzar, necesitamos configurar nuestro entorno de desarrollo Python con un entorno virtual aislado.
# Crear entorno virtual
python -m venv mi_entorno
# Activar entorno (Windows)
mi_entorno\Scripts\activate
# Activar entorno (Linux/Mac)
source mi_entorno/bin/activate
# Instalar Django
pip install django
¡Listo! Tu entorno está configurado. Verás (mi_entorno) en tu terminal.
Vamos a crear un proyecto llamado "biblioteca" para gestionar libros.
# Crear proyecto
django-admin startproject biblioteca
# Entrar al proyecto
cd biblioteca
# Crear aplicación
python manage.py startapp libros
Debemos registrar nuestra aplicación en el archivo de configuración del proyecto.
# Encuentra INSTALLED_APPS y agrega tu app
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'libros', # ← Agrega esta línea
]
El modelo define la estructura de nuestra tabla en la base de datos. Crearemos un modelo para los libros.
from django.db import models
class Libro(models.Model):
titulo = models.CharField(max_length=200)
autor = models.CharField(max_length=100)
isbn = models.CharField(max_length=13, unique=True)
fecha_publicacion = models.DateField()
descripcion = models.TextField()
disponible = models.BooleanField(default=True)
def __str__(self):
return self.titulo
class Meta:
verbose_name_plural = 'Libros'
CharField: Texto corto | TextField: Texto largo | DateField: Fechas | BooleanField: Verdadero/Falso
# Generar archivo de migración
python manage.py makemigrations
# Aplicar cambios a la base de datos
python manage.py migrate
Las vistas manejan la lógica de nuestra aplicación. Crearemos las 4 operaciones: Crear, Leer, Actualizar y Eliminar.
from django.shortcuts import render, redirect, get_object_or_404
from .models import Libro
# LISTAR todos los libros
def lista_libros(request):
libros = Libro.objects.all()
return render(request, 'libros/lista.html', {'libros': libros})
# VER detalle de un libro
def detalle_libro(request, id):
libro = get_object_or_404(Libro, id=id)
return render(request, 'libros/detalle.html', {'libro': libro})
# CREAR nuevo libro
def crear_libro(request):
if request.method == 'POST':
libro = Libro(
titulo=request.POST['titulo'],
autor=request.POST['autor'],
isbn=request.POST['isbn'],
fecha_publicacion=request.POST['fecha_publicacion'],
descripcion=request.POST['descripcion']
)
libro.save()
return redirect('lista_libros')
return render(request, 'libros/crear.html')
# EDITAR libro existente
def editar_libro(request, id):
libro = get_object_or_404(Libro, id=id)
if request.method == 'POST':
libro.titulo = request.POST['titulo']
libro.autor = request.POST['autor']
libro.save()
return redirect('lista_libros')
return render(request, 'libros/editar.html', {'libro': libro})
# ELIMINAR libro
def eliminar_libro(request, id):
libro = get_object_or_404(Libro, id=id)
if request.method == 'POST':
libro.delete()
return redirect('lista_libros')
return render(request, 'libros/eliminar.html', {'libro': libro})
Las URLs conectan las rutas web con nuestras vistas.
from django.urls import path
from . import views
urlpatterns = [
path('', views.lista_libros, name='lista_libros'),
path('libro/<int:id>/', views.detalle_libro, name='detalle_libro'),
path('crear/', views.crear_libro, name='crear_libro'),
path('editar/<int:id>/', views.editar_libro, name='editar_libro'),
path('eliminar/<int:id>/', views.eliminar_libro, name='eliminar_libro'),
]
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('libros.urls')), # ← Agrega esta línea
]
Crea la carpeta libros/templates/libros/ y dentro agrega estos archivos:
<!-- lista.html -->
<h1>Biblioteca - Lista de Libros</h1>
<a href="{% url 'crear_libro' %}">Agregar Nuevo Libro</a>
<ul>
{% for libro in libros %}
<li>
<a href="{% url 'detalle_libro' libro.id %}">{{ libro.titulo }}</a>
- {{ libro.autor }}
<a href="{% url 'editar_libro' libro.id %}">Editar</a>
<a href="{% url 'eliminar_libro' libro.id %}">Eliminar</a>
</li>
{% endfor %}
</ul>
<!-- crear.html -->
<h1>Crear Nuevo Libro</h1>
<form method="post">
{% csrf_token %}
<input type="text" name="titulo" placeholder="Título" required>
<input type="text" name="autor" placeholder="Autor" required>
<input type="text" name="isbn" placeholder="ISBN" required>
<input type="date" name="fecha_publicacion" required>
<textarea name="descripcion" placeholder="Descripción"></textarea>
<button type="submit">Guardar</button>
</form>
Es momento de ver tu aplicación en acción.
python manage.py runserver
¡Felicidades! Abre tu navegador en http://127.0.0.1:8000 y verás tu aplicación funcionando.
Crea un superusuario con python manage.py createsuperuser y accede a http://127.0.0.1:8000/admin para gestionar tus libros visualmente.
Para gestionar libros desde el panel de administración de Django:
from django.contrib import admin
from .models import Libro
@admin.register(Libro)
class LibroAdmin(admin.ModelAdmin):
list_display = ('titulo', 'autor', 'isbn', 'disponible')
list_filter = ('disponible', 'fecha_publicacion')
search_fields = ('titulo', 'autor', 'isbn')