Una API REST completa para la gestión de productos desarrollada con Django, Django REST Framework y MySQL.
- CRUD completo para productos (Crear, Leer, Actualizar, Eliminar)
- Base de datos MySQL con configuración flexible
- API REST con Django REST Framework
- Documentación automática con Swagger/OpenAPI
- Panel de administración personalizado
- Filtros y búsqueda avanzados
- Paginación automática
- Validaciones robustas
- Pruebas unitarias completas
id
: Identificador único (auto-incremento)nombre
: Nombre del producto (máximo 200 caracteres)categoria
: Categoría del producto (máximo 100 caracteres)marca
: Marca del producto (máximo 100 caracteres)precio
: Precio del producto (DecimalField con 2 decimales)cantidad
: Cantidad disponible en inventario (entero positivo)fecha_creacion
: Fecha y hora de creación (automática)fecha_actualizacion
: Fecha y hora de última actualización (automática)
- Python 3.10+
- MySQL Server
- Git
git clone <url-del-repositorio>
cd api_productos_python
python -m venv venv
Windows:
.\venv\Scripts\Activate.ps1
Linux/Mac:
source venv/bin/activate
pip install -r requirements.txt
- Crear base de datos en MySQL:
CREATE DATABASE db_productos CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- Configurar variables de entorno en
.env
:
DB_HOST=localhost
DB_PORT=3306
DB_NAME=db_productos
DB_USER=root
DB_PASSWORD=tu_contraseña
DB_CHARSET=utf8mb4
DB_COLLATION=utf8mb4_unicode_ci
SECRET_KEY=tu_secret_key
DEBUG=True
ALLOWED_HOSTS=localhost,127.0.0.1
python manage.py migrate
python manage.py createsuperuser
python manage.py runserver
GET /api/productos/
- Listar productos (con paginación y filtros)POST /api/productos/
- Crear nuevo productoGET /api/productos/{id}/
- Obtener producto específicoPUT /api/productos/{id}/
- Actualizar producto completoPATCH /api/productos/{id}/
- Actualizar producto parcialDELETE /api/productos/{id}/
- Eliminar producto
GET /api/productos/buscar/?q=termino
- Buscar productosGET /api/productos/categoria/{categoria}/
- Filtrar por categoríaGET /api/productos/marca/{marca}/
- Filtrar por marcaGET /api/productos/sin-stock/
- Productos sin stockPOST /api/productos/{id}/reducir-stock/
- Reducir stock
page
: Número de páginacategoria
: Filtrar por categoríamarca
: Filtrar por marcaprecio_min
: Precio mínimoprecio_max
: Precio máximosolo_con_stock
: Solo productos con stock (true/false)orden
: Ordenamiento (precio_asc, precio_desc, nombre, fecha_desc)
Una vez que el servidor esté ejecutándose, puedes acceder a:
- Swagger UI: http://localhost:8000/api/docs/
- ReDoc: http://localhost:8000/api/redoc/
- Schema JSON: http://localhost:8000/api/schema/
Accede al panel de administración en: http://localhost:8000/admin/
Funcionalidades del panel:
- Gestión completa de productos
- Búsqueda y filtros avanzados
- Edición en línea
- Acciones masivas (marcar sin stock, duplicar)
- Visualización de stock con colores
python manage.py test
Las pruebas incluyen:
- Pruebas del modelo Producto
- Pruebas de todos los endpoints de la API
- Pruebas de validaciones
- Pruebas de filtros y búsqueda
- Pruebas de paginación
curl -X POST http://localhost:8000/api/productos/ \
-H "Content-Type: application/json" \
-d '{
"nombre": "Laptop Dell XPS 13",
"categoria": "Electrónicos",
"marca": "Dell",
"precio": "1299.99",
"cantidad": 10
}'
curl "http://localhost:8000/api/productos/?categoria=Electrónicos&precio_min=500&orden=precio_asc"
curl "http://localhost:8000/api/productos/buscar/?q=Dell"
curl -X POST http://localhost:8000/api/productos/1/reducir-stock/ \
-H "Content-Type: application/json" \
-d '{"cantidad": 2}'
api_productos_python/
├── api_productos/ # Configuración del proyecto
│ ├── settings.py # Configuración de Django
│ ├── urls.py # URLs principales
│ └── wsgi.py # WSGI configuration
├── productos/ # App de productos
│ ├── models.py # Modelo Producto
│ ├── views.py # ViewSets y vistas
│ ├── serializers.py # Serializadores DRF
│ ├── admin.py # Configuración del admin
│ ├── urls.py # URLs de la app
│ └── tests.py # Pruebas unitarias
├── venv/ # Entorno virtual
├── .env # Variables de entorno
├── requirements.txt # Dependencias
└── README.md # Este archivo
- Validaciones robustas en modelos y serializadores
- Sanitización de datos de entrada
- Configuración segura de base de datos
- Variables de entorno para datos sensibles
Para producción, considera:
- Cambiar
DEBUG=False
- Configurar
ALLOWED_HOSTS
apropiadamente - Usar variables de entorno para datos sensibles
- Configurar HTTPS
- Implementar autenticación y autorización
- Usar un servidor WSGI como Gunicorn
- Configurar un servidor web como Nginx
Para reportar problemas o solicitar funcionalidades, crea un issue en el repositorio.
Este proyecto está bajo la Licencia MIT.