Visión General Backend
El backend de AlojaPlus está construido con Django 5.1.2 y Django REST Framework 3.15.2, implementando una arquitectura modular y escalable. Utiliza MySQL 8.0 como base de datos principal y se integra con servicios externos como AWS S3, Stripe y Google Gemini AI.
Stack Tecnológico
Core Framework
# requirements.txt - Core
Django==5.1.2
djangorestframework==3.15.2
mysqlclient==2.2.5
python-dotenv==1.0.1
PyJWT==2.10.1
Seguridad y Encriptación
# Seguridad
bcrypt==4.2.0
cryptography==44.0.0
pycryptodome==3.21.0
django-cors-headers==4.5.0
Servicios Externos
# AWS y Servicios
boto3==1.35.44 # AWS SDK
stripe==12.0.0 # Payments
requests==2.32.4 # HTTP Client
gunicorn==21.2.0 # WSGI Server
whitenoise==6.6.0 # Static Files
Documentación y Testing
# Documentación
drf-yasg==1.21.8 # Swagger/OpenAPI
Estructura del Proyecto
managementProject/ # Proyecto Django principal
├── settings.py # Configuración principal
├── urls.py # URLs principales
├── wsgi.py # WSGI para deployment
└── asgi.py # ASGI para async
managementApp/ # Aplicación principal
├── modelsfolder/ # Modelos de datos
│ ├── UserModel.py # Usuarios y perfiles
│ ├── PropertyModel.py # Propiedades
│ ├── ContractModel.py # Contratos
│ ├── MenuModel.py # Sistema de menús
│ └── SubscriptionModel.py # Suscripciones
├── serializersfolder/ # Serializadores DRF
│ ├── UsersSerializer.py # Serialización usuarios
│ ├── PropertySerializer.py # Serialización propiedades
│ ├── ContractSerializer.py # Serialización contratos
│ └── MenuSerializer.py # Serialización menús
├── viewsfolder/ # Vistas y endpoints
│ ├── AuthViews.py # Autenticación
│ ├── UsersViews.py # Gestión usuarios
│ ├── PropertyViews.py # Gestión propiedades
│ ├── ContractViews.py # Gestión contratos
│ ├── StripeViews.py # Integración Stripe
│ ├── MenuViews.py # Sistema de menús
│ └── DashboardViews.py # Analytics y métricas
├── utilsfolder/ # Utilidades
│ ├── Crypto_utils.py # Encriptación
│ ├── EmailUtils.py # Gestión emails
│ ├── ValidationUtils.py # Validaciones
│ └── FileUtils.py # Gestión archivos
├── validations/ # Validaciones personalizadas
├── templates/ # Plantillas email
├── management/ # Comandos Django
│ └── commands/ # Comandos personalizados
├── migrations/ # Migraciones BD
├── admin.py # Admin Django
├── apps.py # Configuración app
├── models.py # Modelos legacy
├── urls.py # URLs de la app
└── views.py # Vistas legacy
Principios Arquitectónicos
Separación de Responsabilidades
- Models: Lógica de datos y business rules
- Views: Endpoints y manejo de requests/responses
- Serializers: Validación y transformación de datos
- Utils: Funcionalidades reutilizables y servicios externos
Modularidad
- Estructura organizada por carpetas temáticas
- Separación clara entre autenticación, propiedades, contratos
- Utilidades centralizadas para funciones comunes
Seguridad
- JWT para autenticación stateless
- Encriptación AES-256 para datos sensibles
- Hashing BCrypt para contraseñas
- CORS configurado para acceso controlado
Escalabilidad
- Django REST Framework para APIs robustas
- Conexión optimizada a MySQL
- Integración con servicios cloud (AWS, Stripe)
- Preparado para contenarización con Docker
Configuración Principal
Settings.py Core
# managementProject/settings.py
import os
from dotenv import load_dotenv
import pymysql
# MySQL configuration
pymysql.install_as_MySQLdb()
load_dotenv()
# Security
SECRET_KEY = 'django-insecure-qxxfge2!hs@89umk@mn=trciuio-d$8cz=hbwe7qlwil_5d(pn'
DEBUG = os.getenv('DEBUG_STATUS', 'True').lower() == 'true'
# Database
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': os.getenv('DB_NAME', 'alojaplus'),
'USER': os.getenv('DB_USER', 'alojaplus'),
'PASSWORD': os.getenv('DB_PASSWORD', 'password'),
'HOST': os.getenv('DB_HOST', '44.202.163.123'),
'PORT': os.getenv('DB_PORT', '3306'),
'OPTIONS': {
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
'ssl': {'ssl_disabled': True}
},
}
}
REST Framework Configuration
# REST Framework
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication',
],
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
]
}
Patrones de Desarrollo
API Response Pattern
# Respuesta estándar exitosa
{
"success": True,
"message": "Operación exitosa",
"data": { ... }
}
# Respuesta estándar de error
{
"success": False,
"message": "Error descriptivo",
"errors": { ... }
}
Authentication Pattern
- JWT tokens con expiración de 10 horas
- Middleware de autenticación para endpoints protegidos
- Encriptación de datos sensibles del usuario
File Upload Pattern
- Upload directo a AWS S3
- Validación de tipos de archivo
- Generación de URLs firmadas para acceso seguro
Error Handling Pattern
- Try-catch en todas las vistas
- Logging de errores para debugging
- Respuestas HTTP apropiadas según el tipo de error