Django

Framework web Python con baterias incluidas - ORM, panel admin, auth y seguridad integrados desde el dia uno

TL;DR

En una línea: Django es el framework web de Python con baterías incluidas - todo lo que necesitas, listo para usar.

Fortalezas principales:

  • Panel de administración - un CMS completo gratis
  • ORM - operaciones de base de datos sin SQL
  • Seguridad - protección CSRF, XSS, inyección SQL incluida
  • Django 6.0 - partials de plantillas, tareas en segundo plano, soporte CSP

Core Concepts

Concept 1: MTV Pattern

Django usa Model-Template-View (MTV), similar a MVC:

Model     → Estructura de base de datos (clases Python)
Template  → HTML con lenguaje de plantillas Django
View      → Lógica de negocio, conecta models con templates

Concept 2: ORM

Define tu esquema de base de datos como clases Python. Django maneja el SQL.

from django.db import models

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    published = models.DateTimeField(auto_now_add=True)

# Uso - no se necesita SQL
Article.objects.all()
Article.objects.filter(title__contains='Django')
Article.objects.create(title='Hello', content='World')

Concept 3: URL → View → Template

Las peticiones fluyen a través de URLs hacia views, que renderizan templates:

# urls.py
urlpatterns = [path('articles/', views.article_list)]

# views.py
def article_list(request):
    articles = Article.objects.all()
    return render(request, 'articles.html', {'articles': articles})

Quick Start

Install and Create Project

pip install django
django-admin startproject mysite
cd mysite
python manage.py runserver

Project Structure

mysite/
├── mysite/
│   ├── settings.py    # Configuración
│   ├── urls.py        # Enrutamiento URL
│   └── wsgi.py        # Punto de entrada WSGI
├── manage.py          # Herramienta CLI
└── db.sqlite3         # Base de datos por defecto

Create an App

python manage.py startapp blog

Minimal Example

# blog/views.py
from django.http import JsonResponse

def hello(request):
    return JsonResponse({'message': 'Hello Django!'})

# mysite/urls.py
from django.urls import path
from blog import views

urlpatterns = [
    path('hello/', views.hello),
]

Run

python manage.py runserver
# Abre http://localhost:8000/hello/

Gotchas

Don’t forget to add apps to INSTALLED_APPS

# settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    ...
    'blog',  # Tu app
]

Migrations are required after model changes

# Después de cambiar models.py
python manage.py makemigrations  # Crear archivo de migración
python manage.py migrate         # Aplicar a la base de datos

CSRF token required for POST forms

<form method="POST">
    {% csrf_token %}
    <input type="text" name="title">
    <button type="submit">Enviar</button>
</form>

Static files need configuration

# settings.py
STATIC_URL = '/static/'
STATICFILES_DIRS = [BASE_DIR / 'static']

# template
{% load static %}
<img src="{% static 'logo.png' %}">

When to Use

Ideal para:

  • Sitios web con mucho contenido (noticias, blogs)
  • Aplicaciones con mucha administración
  • Prototipado rápido con Python
  • Equipos que prefieren convención sobre configuración

No ideal para:

  • Microservicios (usa FastAPI)
  • Aplicaciones en tiempo real (usa FastAPI + WebSockets)
  • APIs REST simples (Django REST Framework añade complejidad)

Comparación:

CaracterísticaDjangoFastAPIFlask
Curva de aprendizajeMediaFácilFácil
Características incluidasMuchasPocasMínimas
Panel adminNoNo
Soporte asyncParcialCompletoLimitado

Next Steps

Cheatsheet

ComandoDescripción
django-admin startproject nameCrear proyecto
python manage.py startapp nameCrear app
python manage.py runserverIniciar servidor de dev
python manage.py makemigrationsCrear migraciones
python manage.py migrateAplicar migraciones
python manage.py createsuperuserCrear usuario admin
python manage.py shellShell Python con Django
python manage.py testEjecutar tests