Skip to main content

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