🎸 Django Desde Cero - Guía Completa

Aprende Django desde los fundamentos hasta conceptos avanzados

"Django is a high-level Python web framework that encourages rapid development and clean, pragmatic design."
Explorar Temas

📖 Temas del Curso

Haz clic en cualquier tema para ver el contenido detallado

📌 Introducción a Django

¿Qué es Django? Django es un framework web de alto nivel para Python que fomenta el desarrollo rápido y el diseño limpio y pragmático.

Características principales:

  • Baterías incluidas: Viene con todo lo necesario
  • ORM potente: Base de datos abstracta
  • Admin automático: Panel de administración generado
  • Seguridad: Protección contra ataques comunes

Historia:

Django fue desarrollado internamente desde 2003 y liberado como open source en 2005. Lleva el nombre del músico de jazz Django Reinhardt.

💡 Dato curioso: Instagram, Pinterest y Mozilla usan Django en producción.
← Volver a temas

🔧 Instalación y Configuración

Instalar Django:

# Crear entorno virtual
python -m venv venv

# Activar entorno (Windows)
venv\Scripts\activate

# Activar entorno (Linux/Mac)
source venv/bin/activate

# Instalar Django
pip install django

# Verificar instalación
python -m django --version

Crear proyecto:

django-admin startproject mi_proyecto
cd mi_proyecto
python manage.py runserver
⚠️ Importante: Usa siempre entornos virtuales para aislar dependencias.
← Volver a temas

🏗️ MTV Pattern

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

Componente Responsabilidad
Model Estructura de datos y base de datos
Template Presentación y HTML
View Lógica de negocio

Flujo de una petición:

  1. El usuario hace petición al servidor
  2. Django routing determina la View
  3. La View consulta el Model
  4. La View renderiza el Template
  5. Se devuelve la respuesta HTTP
← Volver a temas

📦 Models, Views, Templates

Modelo:

from django.db import models

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

    def __str__(self):
        return self.title

Vista:

from django.shortcuts import render
from .models import Post

def post_list(request):
    posts = Post.objects.all()
    return render(request, 'posts/list.html', {'posts': posts})

Template:

{% raw %}{% extends 'base.html' %}

{% block content %}
  {% for post in posts %}
    <h2>{{ post.title }}</h2>
    <p>{{ post.content }}</p>
  {% endfor %}
{% endblock %}{% endraw %}
← Volver a temas

🗄️ Django ORM

Consultas básicas:

# Crear
Post.objects.create(title='Nuevo', content='...')

# Leer todos
posts = Post.objects.all()

# Filtrar
posts = Post.objects.filter(title__icontains='django')

# Obtener uno
post = Post.objects.get(id=1)

# Actualizar
post.title = 'Actualizado'
post.save()

# Eliminar
post.delete()

Relaciones:

class Author(models.Model):
    name = models.CharField(max_length=100)

class Book(models.Model):
    title = models.CharField(max_length=200)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
← Volver a temas

📝 Forms y ModelForms

Formulario básico:

from django import forms

class ContactForm(forms.Form):
    name = forms.CharField(max_length=100)
    email = forms.EmailField()
    message = forms.CharField(widget=forms.Textarea)

ModelForm:

from django.forms import ModelForm
from .models import Post

class PostForm(ModelForm):
    class Meta:
        model = Post
        fields = ['title', 'content']
💡 Tip: ModelForms generan automáticamente campos basados en el modelo.
← Volver a temas

🔐 Autenticación

Login:

from django.contrib.auth import authenticate, login

def login_view(request):
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(request, username=username, password=password)
        if user:
            login(request, user)

Proteger vistas:

from django.contrib.auth.decorators import login_required

@login_required
def dashboard(request):
    return render(request, 'dashboard.html')
← Volver a temas

⚙️ Admin Personalizado

Registrar modelo:

from django.contrib import admin
from .models import Post

@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
    list_display = ['title', 'created_at', 'author']
    list_filter = ['created_at']
    search_fields = ['title', 'content']

Personalizar admin:

# admin.py
admin.site.site_header = 'Mi Sitio Admin'
admin.site.site_title = 'Admin Portal'
← Volver a temas

🌐 APIs REST

Django REST Framework:

# serializers.py
from rest_framework import serializers
from .models import Post

class PostSerializer(serializers.ModelSerializer):
    class Meta:
        model = Post
        fields = '__all__'

ViewSet:

# views.py
from rest_framework import viewsets

class PostViewSet(viewsets.ModelViewSet):
    queryset = Post.objects.all()
    serializer_class = PostSerializer
← Volver a temas

🔌 WebSockets con Channels

Instalar Channels:

pip install channels channels-redis

Consumidor WebSocket:

# consumers.py
import json
from channels.generic.websocket import AsyncWebsocketConsumer

class ChatConsumer(AsyncWebsocketConsumer):
    async def connect(self):
        await self.accept()

    async def receive(self, text_data):
        await self.send(text_data=json.dumps({'message': text_data}))
← Volver a temas

📋 Celery para Tareas

Configurar Celery:

# celery.py
from celery import Celery

app = Celery('mi_proyecto')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

Tarea asíncrona:

@app.task
def send_email(user_id):
    # Enviar email
    pass

# Llamar tarea
send_email.delay(user_id=1)
← Volver a temas

🚀 Deploy con Gunicorn/Nginx

Gunicorn:

# Instalar
pip install gunicorn

# Ejecutar
gunicorn mi_proyecto.wsgi:application --bind 0.0.0.0:8000

Nginx config:

server {
    listen 80;
    server_name midominio.com;

    location / {
        proxy_pass http://127.0.0.1:8000;
    }

    location /static/ {
        alias /var/www/static/;
    }
}
← Volver a temas

📚 Contenido del Curso

Módulo 1: Fundamentos

  • Introducción a Django
  • Instalación y configuración
  • MTV Pattern
  • Models, Views, Templates
Ir a temas →

Módulo 2: Intermedio

  • Django ORM
  • Forms y ModelForms
  • Autenticación
  • Admin personalizado
Ir a temas →

Módulo 3: Avanzado

  • APIs REST
  • WebSockets con Channels
  • Celery para tareas
  • Deploy con Gunicorn/Nginx
Ir a temas →

📝 Ejemplos Rápidos

Modelo Django

from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.title

Vista Basada en Clases

from django.views.generic import ListView, DetailView
from .models import Post

class PostListView(ListView):
    model = Post
    template_name = 'posts/list.html'
    context_object_name = 'posts'
    paginate_by = 10

📖 Recursos Adicionales

Herramientas

  • Django Debug Toolbar
  • Django REST Framework
  • pytest-django

Comunidades

👨‍💻 Desarrollado por Isaac Esteban Haro Torres

Ingeniero en Sistemas · Full Stack · Automatización · Data

📧 Email: zackharo1@gmail.com

📱 WhatsApp: 098805517

💻 GitHub: github.com/ieharo1

🌐 Portafolio: ieharo1.github.io/portafolio-isaac.haro/