Desarrollo de Ecommerce con Django (parte 1)

villacisg93

Gabriel Villacis

Posted on March 27, 2024

Desarrollo de Ecommerce con Django (parte 1)

¡Bienvenidos a la primera parte de nuestro tutorial sobre cómo crear un ecommerce con Django! En esta sección, configuraremos nuestro proyecto de Django, crearemos la aplicación store dentro de él y definiremos los modelos esenciales. También configuraremos la conexión a una base de datos PostgreSQL y el administrador de Django para gestionar nuestros modelos.
¡Vamos a empezar!

Paso 1: Creación del proyecto

  • Primero vamos a crear la carpeta donde se almacenará el proyecto. El nombre recomendado es django_ecommerce. Cuando la carpeta esté creada ingresaremos en ella utilizando la terminal.

mkdir django_ecommerce & cd django_ecommerce

  • Después inicializaremos el proyecto con poetry (el cual será nuestro gestor de dependencias y del entorno virtual del proyecto. Cabe mencionar que en este punto se debe contar con poetry instalado de forma global: pip install poetry. El comando para inicializar el proyecto es:

poetry init

  • Una vez que el proyecto poetry esté inicializado vamos a agregar el paquete django:

poetry add django

  • A continuación, procederemos a crear el proyecto django. El nombre que daremos al proyecto es ecommerce, lo haremos usando el comando:

poetry run django-admin startproject ecommerce .

  • Y finalmente ejecutamos el proyecto:

poetry run python manage.py runserver

Paso 2: Creación de la Aplicación Store

  • Asegúrate de que estás en el directorio del proyecto django_ecommerce. Luego, ejecuta el siguiente comando:

poetry run python manage.py startapp store

  • Abre el archivo ecommerce/settings.py y busca la lista INSTALLED_APPS. Añade el nombre de la aplicación recién creada al final de esta lista. Debería verse así:
INSTALLED_APPS = [
    ...
    'store.apps.StoreConfig'
]
Enter fullscreen mode Exit fullscreen mode

Paso 3: Definición de Modelos

  • Dentro del directorio de la aplicación "store", primero crea un directorio llamado "models".

  • Dentro del directorio "models", crea un archivo especial __init__.py para convertir el directorio en un paquete de Python.

  • Luego, dentro del paquete "models", crea dos archivos Python: "categoria.py" y "producto.py".

La estructura de directorios debería verse así:

store/
├── __init__.py
├── admin.py
├── apps.py
├── migrations/
│   └── ...
├── models/
│   ├── __init__.py
│   ├── categoria.py
│   └── producto.py
├── tests.py
└── views.py
Enter fullscreen mode Exit fullscreen mode
  • Abre el archivo "categoria.py" y pega el código del modelo Categoria dentro de él.
# store/models/categoria.py
from django.db import models

class Categoria(models.Model):
    nombre = models.CharField(max_length=50)
    fecha_registro = models.DateTimeField(auto_now_add=True)
    fecha_ult_act = models.DateTimeField(auto_now=True)

    def __str__(self) -> str:
        return f'{self.nombre} ({self.id})'

    class Meta:
        db_table = 'st_categorias'
        verbose_name = 'Categoría'
        verbose_name_plural = 'Categorías'
Enter fullscreen mode Exit fullscreen mode
  • Abre el archivo "producto.py" y pega el código del modelo Producto dentro de él.
# store/models/producto.py
from django.db import models
from .categoria import Categoria

class Producto(models.Model):
    categorias = models.ManyToManyField(Categoria, related_name='productos')
    nombre = models.CharField(max_length=150)
    descripcion = models.TextField(blank=True, null=True)
    precio = models.DecimalField(max_digits=9, decimal_places=2)
    imagen = models.ImageField(upload_to='imagenes_prod/')
    activo = models.BooleanField()
    fecha_registro = models.DateTimeField(auto_now_add=True)
    fecha_ult_act = models.DateTimeField(auto_now=True)

    def __str__(self) -> str:
        return f'{self.nombre} ({self.id})'

    class Meta:
        db_table = 'st_productos'
        verbose_name = 'Producto'
        verbose_name_plural = 'Productos'
Enter fullscreen mode Exit fullscreen mode
  • En módulo models/__init__.py incluye la importación de los modelos creados:
from .categoria import Categoria
from .producto import Producto
Enter fullscreen mode Exit fullscreen mode

Paso 4: Configuración para el Manejo de Imágenes

Asegurar la configuración adecuada para manejar imágenes en Django es esencial, especialmente al utilizar el campo ImageField en el modelo Producto.

  • Asegúrate de que tienes Pillow instalado. Puedes hacerlo ejecutando el siguiente comando en tu terminal:

poetry add pillow

  • Después de instalar Pillow, necesitas configurar la carpeta para almacenar las imágenes subidas. Por lo general, esto se hace agregando una configuración en tu archivo settings.py. Abre tu archivo ecommerce/settings.py y agrega o modifica las siguientes líneas:
# Configuración para manejar archivos multimedia
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR  / 'media'
Enter fullscreen mode Exit fullscreen mode

Adicionalmente, en las URLS del proyecto ecommerce/urls.py agrega:

from django.conf import settings
from django.conf.urls.static import static

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Enter fullscreen mode Exit fullscreen mode

Estas líneas de código permiten que, cuando estemos en modo de depuración (DEBUG=True en settings.py), Django pueda manejar automáticamente las solicitudes para archivos de medios y los sirva correctamente (publicarlos vía http) tomándolos desde el directorio establecido en MEDIA_ROOT.

  • Crea la carpeta media/ en la raíz de tu proyecto si aún no existe. Esto es donde se almacenarán las imágenes subidas. Puedes crear esta carpeta manualmente o hacerlo ejecutando el siguiente comando en tu terminal:

mkdir media

Ahora, las imágenes subidas se almacenarán en la carpeta media/imagenes_prod/ dentro de tu proyecto.

Paso 5: Configuración de la Conexión a PostgreSQL

En el archivo ecommerce/settings.py, asegúrate de configurar la conexión a la base de datos PostgreSQL. Reemplaza la sección DATABASES con lo siguiente:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'nombre_bd',
        'USER': 'usuario_bd',
        'PASSWORD': 'contraseña',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}
Enter fullscreen mode Exit fullscreen mode

Asegúrate de reemplazar 'nombre_bd', 'usuario_bd', y 'contraseña' con los detalles correctos de tu base de datos PostgreSQL.

Adicionalmente se necesita instalar el controlador psycopg2 en tu entorno virtual. Puedes hacerlo ejecutando el siguiente comando en tu terminal:

poetry add psycopg2-binary

Paso 6: Creación y Ejecución de Migraciones

  • Ejecuta el siguiente comando para crear las migraciones iniciales:

poetry run python manage.py makemigrations

Este comando buscará cualquier cambio en tus modelos y generará archivos de migración en el directorio migrations/ de cada aplicación de tu proyecto.

Después de crear las migraciones, ejecuta el siguiente comando para aplicar las migraciones a la base de datos:

poetry run python manage.py migrate

Este comando ejecutará todas las migraciones pendientes y actualizará la base de datos de acuerdo con los modelos definidos.

Si tienes algún problema con la migración o necesitas revertir los cambios, puedes seguir estos pasos:

Para deshacer la última migración aplicada y volver a una migración anterior específica, usa el siguiente comando:

poetry run python manage.py migrate <nombre_aplicacion> <nombre_migracion_anterior>

Reemplaza <nombre_aplicacion> con el nombre de la aplicación y <nombre_migracion_anterior> con el nombre de la migración a la que deseas regresar. Este comando revertirá las migraciones hasta alcanzar el estado de la migración especificada.

Para deshacer todas las migraciones de una aplicación y llevarla a su estado inicial, utiliza el siguiente comando:

poetry run python manage.py migrate <nombre_aplicacion> zero

Reemplaza <nombre_aplicacion> con el nombre de la aplicación. Este comando revertirá todas las migraciones aplicadas para esa aplicación, dejándola como si nunca hubieras ejecutado ninguna migración.

Paso 7: Configuración del Administrador

En el archivo store/admin.py, registra tus modelos para que puedan ser gestionados a través del administrador de Django:

from django.contrib import admin
from store.models import Categoria, Producto

admin.site.site_header = 'Administrador de Ecommerce'

@admin.register(Categoria)
class CategoriaAdmin(admin.ModelAdmin):
    list_display = ('id', 'nombre', 'fecha_registro', 'fecha_ult_act')

@admin.register(Producto)
class ProductoAdmin(admin.ModelAdmin):
    list_display = ('id', 'nombre', 'descripcion', 'precio', 'activo', 'fecha_registro', 'fecha_ult_act')
Enter fullscreen mode Exit fullscreen mode

¡Y eso es todo! Ahora puedes acceder al administrador de Django en http://localhost:8000/admin y gestionar tus categorías y productos. Recuerda crear un superusuario ejecutando:

poetry run python manage.py createsuperuser

Y finalmente, para ejecutar el servidor de desarrollo de Django, usa el siguiente comando:

poetry run python manage.py runserver

Espero que este tutorial te haya sido útil.

Da clic aquí para ir a la segunda parte de este tutorial.

💖 💪 🙅 🚩
villacisg93
Gabriel Villacis

Posted on March 27, 2024

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related