0%
Desarrollo web con Django

Desarrollo web con Django

Cómo crear aplicaciones web robustas con el framework Django.

I

InSkillCoach

· min

Desarrollo web con Django

Django es un framework web de Python de alto nivel que fomenta un desarrollo rápido y limpio. Con su filosofía “batteries included”, Django proporciona todo lo que necesitas para construir aplicaciones web robustas y mantenibles.

¿Por qué elegir Django?

Django ofrece numerosas ventajas para el desarrollo web:

  • Rápido de desarrollar: Django sigue el principio DRY (Don’t Repeat Yourself) y automatiza muchas tareas
  • Seguro por defecto: protección contra las vulnerabilidades web más comunes (XSS, CSRF, inyección SQL…)
  • Escalable: utilizado por sitios de alto tráfico como Instagram, Pinterest y Disqus
  • Batteries included: ORM integrado, administración automática, sistema de plantillas, autenticación…
  • Comunidad activa: documentación excelente y numerosos recursos disponibles

Instalación y configuración

Para empezar con Django, instálalo mediante pip:

# Créer un environnement virtuel
python -m venv venv
source venv/bin/activate  # Sur Windows: venv\Scripts\activate

# Installer Django
pip install django

# Créer un nouveau projet
django-admin startproject monsite

# Naviguer vers le projet
cd monsite

# Créer une application
python manage.py startapp blog

Estructura de un proyecto Django

Un proyecto Django típico se organiza de la siguiente manera:

monsite/
    manage.py
    monsite/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py
    blog/
        __init__.py
        admin.py
        apps.py
        models.py
        tests.py
        views.py
        urls.py
        migrations/
        templates/
            blog/
                base.html
                index.html
                detail.html
        static/
            blog/
                css/
                js/
                images/

Modelos: definir tus datos

Los modelos de Django definen la estructura de tus datos:

# blog/models.py
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User

class Category(models.Model):
    name = models.CharField(max_length=100)
    slug = models.SlugField(unique=True)
    
    def __str__(self):
        return self.name
    
    class Meta:
        verbose_name_plural = "categories"

class Post(models.Model):
    STATUS_CHOICES = (
        ('draft', 'Brouillon'),
        ('published', 'Publié'),
    )
    
    title = models.CharField(max_length=200)
    slug = models.SlugField(unique_for_date='publish')
    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='blog_posts')
    body = models.TextField()
    category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name='posts')
    publish = models.DateTimeField(default=timezone.now)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='draft')
    
    def __str__(self):
        return self.title
    
    class Meta:
        ordering = ('-publish',)

Después de definir tus modelos, crea y aplica las migraciones:

python manage.py makemigrations
python manage.py migrate

Vistas: la lógica de tu aplicación

Las vistas procesan las peticiones y devuelven respuestas:

# blog/views.py
from django.shortcuts import render, get_object_or_404
from django.core.paginator import Paginator
from .models import Post, Category

def post_list(request, category_slug=None):
    posts = Post.objects.filter(status='published')
    category = None
    
    if category_slug:
        category = get_object_or_404(Category, slug=category_slug)
        posts = posts.filter(category=category)
    
    paginator = Paginator(posts, 10)  # 10 posts par page
    page = request.GET.get('page')
    posts = paginator.get_page(page)
    
    return render(request, 'blog/post_list.html', {
        'posts': posts,
        'category': category
    })

def post_detail(request, year, month, day, post_slug):
    post = get_object_or_404(
        Post,
        slug=post_slug,
        status='published',
        publish__year=year,
        publish__month=month,
        publish__day=day
    )
    
    return render(request, 'blog/post_detail.html', {'post': post})

URLs: enrutamiento de las peticiones

Configura las URLs para dirigir las peticiones a las vistas adecuadas:

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

app_name = 'blog'

urlpatterns = [
    path('', views.post_list, name='post_list'),
    path('category/<slug:category_slug>/', views.post_list, name='post_list_by_category'),
    path('<int:year>/<int:month>/<int:day>/<slug:post_slug>/', views.post_detail, name='post_detail'),
]

# monsite/urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('blog/', include('blog.urls', namespace='blog')),
]

Plantillas: la interfaz de usuario

Las plantillas definen cómo se presentan los datos:

<!-- blog/templates/blog/base.html -->
<!DOCTYPE html>
<html>
<head>
    <title>{% block title %}Mon Blog{% endblock %}</title>
    <link rel="stylesheet" href="{% static 'blog/css/style.css' %}">
</head>
<body>
    <header>
        <h1>Mon Blog</h1>
        <nav>
            <ul>
                <li><a href="{% url 'blog:post_list' %}">Accueil</a></li>
                {% for cat in categories %}
                <li><a href="{% url 'blog:post_list_by_category' cat.slug %}">{{ cat.name }}</a></li>
                {% endfor %}
            </ul>
        </nav>
    </header>
    
    <main>
        {% block content %}
        {% endblock %}
    </main>
    
    <footer>
        <p>&copy; {% now "Y" %} Mon Blog</p>
    </footer>
</body>
</html>

<!-- blog/templates/blog/post_list.html -->
{% extends "blog/base.html" %}

{% block title %}
    {% if category %}{{ category.name }}{% else %}Articles{% endif %}
{% endblock %}

{% block content %}
    <h2>
        {% if category %}
            Articles dans la catégorie "{{ category.name }}"
        {% else %}
            Tous les articles
        {% endif %}
    </h2>
    
    {% for post in posts %}
        <article>
            <h3><a href="{{ post.get_absolute_url }}">{{ post.title }}</a></h3>
            <p class="date">Publié le {{ post.publish }} par {{ post.author }}</p>
            <p>{{ post.body|truncatewords:30|linebreaks }}</p>
        </article>
    {% empty %}
        <p>Aucun article disponible.</p>
    {% endfor %}
    
    {% include "pagination.html" with page=posts %}
{% endblock %}

Administración de Django

Django proporciona una interfaz de administración lista para usar:

# blog/admin.py
from django.contrib import admin
from .models import Category, Post

@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
    list_display = ('name', 'slug')
    prepopulated_fields = {'slug': ('name',)}

@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
    list_display = ('title', 'slug', 'author', 'publish', 'status')
    list_filter = ('status', 'created', 'publish', 'author')
    search_fields = ('title', 'body')
    prepopulated_fields = {'slug': ('title',)}
    raw_id_fields = ('author',)
    date_hierarchy = 'publish'
    ordering = ('status', 'publish')

Lanzar el servidor de desarrollo

Para probar tu aplicación:

python manage.py runserver

Accede a http://127.0.0.1:8000/ en tu navegador.

Funcionalidades avanzadas

Django ofrece numerosas funcionalidades avanzadas:

  • Autenticación: sistema completo de gestión de usuarios
  • Formularios: creación, validación y procesamiento de formularios
  • Pruebas: framework de pruebas integrado
  • Internacionalización: soporte multilingüe
  • Caché: varios niveles de almacenamiento en caché
  • Seguridad: protección contra los ataques más comunes

Despliegue

Para desplegar una aplicación Django en producción:

  1. Configurar los parámetros de producción en settings.py
  2. Recopilar los archivos estáticos: python manage.py collectstatic
  3. Elegir un servidor WSGI como Gunicorn o uWSGI
  4. Configurar un servidor web como Nginx o Apache
  5. Utilizar una base de datos robusta como PostgreSQL

Conclusión

Django es un framework potente que te permite construir rápidamente aplicaciones web complejas y seguras. Su filosofía “batteries included” y su estructura bien organizada lo convierten en una excelente opción para los desarrolladores de Python que desean crear sitios web robustos y mantenibles.

Tanto si construyes un simple blog, un sitio de comercio electrónico o una aplicación web compleja, Django te proporciona las herramientas necesarias para que tu proyecto sea un éxito.

InSkillCoach

Acerca de InSkillCoach

Experto en formación y tecnologías

Coach especializado en tecnologías avanzadas e IA, impulsado por GNeurone Inc.

Certificaciones:

  • AWS Certified Solutions Architect – Professional
  • Certificaciones de Google Cloud
  • Microsoft Certified: DevOps Engineer Expert
  • Certified Kubernetes Administrator (CKA)
  • CompTIA Security+
1.3k
126

Comentarios

Los comentarios funcionan con GitHub Discussions

Inicia sesión con GitHub para participar en la discusión

¡Enlace copiado!