Volver a proyectos
Web
1 min de lectura

Plataforma E-commerce con Django

Por Jeferson Heredia
13 de agosto de 2025
Python
Django
E-commerce
Web Development
Plataforma E-commerce con Django

Descripción

Esta plataforma de comercio electrónico fue desarrollada con Django y Python para ofrecer una solución completa, segura y escalable para negocios online.

El sistema implementa todas las funcionalidades esenciales de un e-commerce moderno, incluyendo catálogo de productos, carrito de compras, procesamiento de pagos, gestión de inventario y panel de administración. La arquitectura está basada en el patrón MTV (Model-Template-View) de Django, con una clara separación de responsabilidades.

El backend está desarrollado íntegramente en Python, aprovechando el ecosistema de Django para funcionalidades como autenticación, autorización, formularios y ORM. Para el frontend, utilicé Django Templates con Bootstrap y JavaScript para crear una interfaz responsiva y amigable para el usuario.

Tecnologías Utilizadas

Python

Lenguaje principal para el desarrollo del backend

Django

Framework web para el desarrollo rápido

PostgreSQL

Base de datos relacional para almacenamiento persistente

Celery

Procesamiento asíncrono de tareas como envío de emails

Redis

Caché y broker de mensajes para Celery

Stripe

Procesamiento seguro de pagos online

Desafíos

Escalabilidad

Diseñar un sistema que pudiera manejar picos de tráfico durante campañas promocionales sin degradar la experiencia.

Seguridad en pagos

Implementar un sistema de procesamiento de pagos seguro que cumpliera con los estándares PCI DSS y protegiera la información sensible de los clientes.

Experiencia personalizada

Crear un sistema de recomendaciones que ofreciera productos relevantes basados en el comportamiento y preferencias del usuario.

Soluciones

Arquitectura escalable

Implementé un sistema de caché en múltiples niveles con Django cache framework y Redis para optimizar el rendimiento.

Integración segura

Utilicé la biblioteca oficial de Stripe para Python, evitando almacenar datos sensibles de tarjetas en nuestros servidores.

Motor de recomendaciones

Desarrollé un sistema de recomendaciones basado en collaborative filtering implementado en Python con Django ORM y pandas.

Galería

Página de producto con información detallada y recomendaciones

Página de producto con información detallada y recomendaciones

Proceso de checkout optimizado para conversión

Proceso de checkout optimizado para conversión

Panel de administración para gestión de productos e inventario

Panel de administración para gestión de productos e inventario

Ejemplo de Código

user_manager.py

from django.db import models
from django.contrib.auth.models import User
from django.utils.text import slugify
from django.urls import reverse
import uuid

class Category(models.Model):
    name = models.CharField(max_length=100)
    slug = models.SlugField(unique=True)
    description = models.TextField(blank=True)
    
    class Meta:
        verbose_name_plural = "Categories"
        
    def __str__(self):
        return self.name
        
    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.name)
        super().save(*args, **kwargs)

class Product(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(max_length=200)
    slug = models.SlugField(unique=True)
    category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name="products")
    description = models.TextField()
    price = models.DecimalField(max_digits=10, decimal_places=2)
    stock = models.PositiveIntegerField(default=0)
    available = models.BooleanField(default=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    image = models.ImageField(upload_to='products/', blank=True, null=True)
    featured = models.BooleanField(default=False)
    
    class Meta:
        ordering = ['-created_at']
        
    def __str__(self):
        return self.name
        
    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.name)
        super().save(*args, **kwargs)
        
    def get_absolute_url(self):
        return reverse('product_detail', kwargs={'slug': self.slug})
        
    @property
    def is_in_stock(self):
        return self.stock > 0

class Order(models.Model):
    STATUS_CHOICES = (
        ('pending', 'Pending'),
        ('processing', 'Processing'),
        ('shipped', 'Shipped'),
        ('delivered', 'Delivered'),
        ('cancelled', 'Cancelled'),
    )
    
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="orders")
    status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='pending')
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    shipping_address = models.TextField()
    total_amount = models.DecimalField(max_digits=10, decimal_places=2)
    
    def __str__(self):
        return f"Order {self.id} - {self.user.username}"
        
    @property
    def order_items(self):
        return self.items.all()
        
    @property
    def item_count(self):
        return sum(item.quantity for item in self.order_items)

class OrderItem(models.Model):
    order = models.ForeignKey(Order, on_delete=models.CASCADE, related_name="items")
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    quantity = models.PositiveIntegerField(default=1)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    
    def __str__(self):
        return f"{self.quantity} x {self.product.name}"
        
    @property
    def total_price(self):
        return self.price * self.quantity

# Views example (in views.py)
from django.shortcuts import render, get_object_or_404
from django.views.generic import ListView, DetailView
from .models import Product, Category

class ProductListView(ListView):
    model = Product
    template_name = 'shop/product_list.html'
    context_object_name = 'products'
    paginate_by = 12
    
    def get_queryset(self):
        queryset = Product.objects.filter(available=True)
        category_slug = self.kwargs.get('category_slug')
        
        if category_slug:
            category = get_object_or_404(Category, slug=category_slug)
            queryset = queryset.filter(category=category)
            
        return queryset
        
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['categories'] = Category.objects.all()
        return context

class ProductDetailView(DetailView):
    model = Product
    template_name = 'shop/product_detail.html'
    context_object_name = 'product'
    slug_url_kwarg = 'slug'

Compartir

Habilidades Python

Python Core
Data Analysis
Web Frameworks
Machine Learning
Testing

¿Interesado en un proyecto similar?

Si estás buscando implementar una solución en Python o tienes un proyecto en mente que requiera habilidades de desarrollo similares, no dudes en contactarme para discutir cómo puedo ayudarte.

Contactar