Gabriel Villacis
Posted on March 27, 2024
¡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'
]
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
- 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'
- 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'
- En módulo
models/__init__.py
incluye la importación de los modelos creados:
from .categoria import Categoria
from .producto import Producto
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'
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)
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',
}
}
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')
¡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.
Posted on March 27, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.