Framework Django

Centro de Innovación, la Agroindustria y la Aviación

Instructor: Alexander Patiño Londoño

Python Web Framework

Aprende Django desde Cero

El framework web más poderoso de Python. Construye aplicaciones escalables, seguras y profesionales con las mejores prácticas del desarrollo moderno.

Seguro por defecto
Altamente escalable
Desarrollo rápido
ORM Potente Base de datos simplificada
Seguridad Protección integrada
Alta Velocidad Rendimiento optimizado
views.py
1 from django.http import JsonResponse
2
3 def api_view(request):
4 data = {'status': 'success'}
5 return JsonResponse(data)
Scroll Down

¿Qué es Django?

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.

Filosofía de Diseño

  • DRY (Don't Repeat Yourself): Cada pieza de conocimiento debe tener una representación única y autoritativa en el sistema.
  • Desarrollo Rápido: Django fue diseñado para ayudar a los desarrolladores a llevar aplicaciones desde el concepto hasta la finalización lo más rápido posible.
  • Baterías Incluidas: Django incluye docenas de extras que puedes usar para manejar tareas comunes de desarrollo web.

Seguridad

Protección contra SQL injection, XSS, CSRF y clickjacking por defecto.

Escalable

Desde startups hasta empresas Fortune 500, Django escala con tus necesidades.

Versátil

Desde CMS hasta redes sociales, sitios científicos y aplicaciones financieras.

Historia de Django

2003

Nacimiento en Lawrence Journal-World

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.

2005

Liberación Open Source

Django se libera al público como proyecto open source bajo licencia BSD, marcando el inicio de una comunidad global de desarrolladores.

2008

Django 1.0 - Estabilidad Garantizada

Primera versión estable con garantía de compatibilidad hacia atrás, estableciendo Django como framework maduro y confiable para producción.

2013

Django 1.5 - Primera gran evolución

Introducción del soporte para Python 3, modelos de usuario personalizables y mejoras significativas en el ORM que modernizaron el framework.

2015

Django 1.8 LTS - Soporte Extendido

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.

2017

Django 2.0 - Modernización Total

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.

2019

Django 3.0 - ASGI y Async

Introducción del soporte ASGI para aplicaciones asíncronas, permitiendo WebSockets, HTTP/2 y operaciones concurrentes de alto rendimiento.

2024

Django 5.0 - Futuro Brillante

Última versión mayor con mejoras significativas de rendimiento, seguridad mejorada, y nuevas características para el desarrollo web moderno. Python 3.10+ requerido.

Arquitectura MTV

Django sigue el patrón Model-Template-View (MTV), una variación del MVC tradicional

M

Model

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()
T

Template

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>
V

View

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')
Navegador
URLs
View
Model
Template

Versiones de Django

v5.0 LTS
Actual
Diciembre 2023
  • Requiere Python 3.10 o superior
  • Facet filters en el panel de administración
  • Simplified templates para mejor rendimiento
  • Database-computed defaults mejorados
  • Soporte extendido hasta abril de 2026
v4.2 LTS
LTS
Abril 2023
  • Soporte hasta abril de 2026
  • Psycopg 3 support
  • Comments on columns y tables
  • Mejoras en async views
  • Nuevas validaciones de formularios
v4.0
Stable
Diciembre 2021
  • Functional unique constraints
  • Redis cache backend
  • Template-based form rendering
  • Mejoras significativas en el ORM
  • Soporte para zoneinfo
v3.2 LTS
LTS
Abril 2021
  • Soporte hasta abril de 2024
  • Automatic AppConfig discovery
  • Customizable User model improvements
  • Improved admin interface
  • JSONField para todos los backends
v3.0
Legacy
Diciembre 2019
  • ASGI support para aplicaciones async
  • MariaDB official support
  • Exclusion constraints en PostgreSQL
  • Async views soporte inicial
  • Requiere Python 3.6+
v2.2 LTS
LTS
Abril 2019
  • Último con soporte Python 3.5
  • Constraints framework introducido
  • Custom enum choices para modelos
  • Mejoras significativas de rendimiento
  • Soporte extendido hasta abril de 2022

Instalación y Configuración

01

Requisitos Previos

Antes de instalar Django, asegúrate de tener Python instalado en tu sistema.

Terminal
python --version

Django 5.0 requiere Python 3.10 o superior

02

Crear Entorno Virtual

Es una buena práctica usar entornos virtuales para aislar las dependencias.

Terminal
python -m venv myenv
source myenv/bin/activate  # Linux/Mac
myenv\Scripts\activate     # Windows
03

Instalar Django

Usa pip para instalar Django en tu entorno virtual.

Terminal
pip install django

Para una versión específica: pip install django==5.0

04

Crear Proyecto

Crea tu primer proyecto Django y ejecuta el servidor de desarrollo.

Terminal
django-admin startproject miproyecto
cd miproyecto
python manage.py runserver

Visita http://127.0.0.1:8000 en tu navegador

¡Felicidades! Django está instalado

Ahora estás listo para comenzar a desarrollar aplicaciones web con Django

Tu Primera Aplicación Django

Aprende creando un CRUD completo paso a paso: desde la instalación hasta el despliegue de tu primera aplicación web funcional

1

Configuración del Entorno

Antes de comenzar, necesitamos configurar nuestro entorno de desarrollo Python con un entorno virtual aislado.

Terminal / CMD
# 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.

2

Crear tu Proyecto Django

Vamos a crear un proyecto llamado "biblioteca" para gestionar libros.

Crear Proyecto
# Crear proyecto
django-admin startproject biblioteca

# Entrar al proyecto
cd biblioteca

# Crear aplicación
python manage.py startapp libros

Estructura del Proyecto:

  • biblioteca/ - Directorio principal del proyecto
  • manage.py - Herramienta de línea de comandos
  • biblioteca/settings.py - Configuración del proyecto
  • libros/ - Tu aplicación para gestionar libros
3

Registrar la Aplicación

Debemos registrar nuestra aplicación en el archivo de configuración del proyecto.

biblioteca/settings.py
# 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
]
4

Crear el Modelo (Base de Datos)

El modelo define la estructura de nuestra tabla en la base de datos. Crearemos un modelo para los libros.

libros/models.py
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'

¿Qué hace cada campo?

CharField: Texto corto | TextField: Texto largo | DateField: Fechas | BooleanField: Verdadero/Falso

Crear la Base de Datos
# Generar archivo de migración
python manage.py makemigrations

# Aplicar cambios a la base de datos
python manage.py migrate
5

Crear las Vistas (CRUD)

Las vistas manejan la lógica de nuestra aplicación. Crearemos las 4 operaciones: Crear, Leer, Actualizar y Eliminar.

libros/views.py
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})
6

Configurar las URLs

Las URLs conectan las rutas web con nuestras vistas.

libros/urls.py (crear este archivo)
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'),
]
biblioteca/urls.py (modificar)
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
]
7

Crear los Templates (HTML)

Crea la carpeta libros/templates/libros/ y dentro agrega estos archivos:

Estructura de Templates:

  • libros/templates/libros/lista.html
  • libros/templates/libros/detalle.html
  • libros/templates/libros/crear.html
  • libros/templates/libros/editar.html
  • libros/templates/libros/eliminar.html
lista.html (ejemplo básico)
<!-- 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
<!-- 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>
8

¡Ejecutar tu Aplicación!

Es momento de ver tu aplicación en acción.

Iniciar Servidor
python manage.py runserver

¡Felicidades! Abre tu navegador en http://127.0.0.1:8000 y verás tu aplicación funcionando.

Panel de Administración

Crea un superusuario con python manage.py createsuperuser y accede a http://127.0.0.1:8000/admin para gestionar tus libros visualmente.

💡

Bonus: Registrar en el Admin

Para gestionar libros desde el panel de administración de Django:

libros/admin.py
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')

Recursos de Aprendizaje

Documentación Oficial

La guía completa y actualizada de Django.

Visitar

Tutorial Oficial

Aprende Django construyendo una aplicación de polls.

Comenzar

GitHub

Explora el código fuente y contribuye al proyecto.

Ver código

Comunidad

Únete a la comunidad de desarrolladores Django.

Conectar