🧪 Ejercicios: Desarrollo Backend con Python y Flask

Registro de usuarios con Flask
Ruta que permite registrar usuarios con validación y hash de contraseña:
@auth_bp.route('/register', methods=['POST'])
def register():
    data = request.get_json()
    username = data.get('username')
    password = data.get('password')

    if not username or not password:
        return jsonify({"error": "Faltan campos requeridos"}), 400

    conn = get_connection()
    cursor = conn.cursor()
    hashed = generate_password_hash(password, method='pbkdf2:sha256', salt_length=8)

    cursor.execute("INSERT INTO users (username, password, tolerancia, nivel_tolerancia) VALUES (%s, %s, %s, %s)",
                  (username, hashed, 0.5, 0.5))  # Valores por defecto
    conn.commit()
    return jsonify({"msg": "Usuario registrado exitosamente"}), 201
Validación de perfil y actualización
Actualización de nombre visible y tolerancia con validación:
@profile_bp.route('/profile', methods=['PUT'])
@jwt_required()
def update_profile():
    user_id = get_jwt_identity()
    data = request.get_json()
    nombre_visible = data.get("nombre_visible")
    nivel_tolerancia = float(data.get("nivel_tolerancia"))

    if not (0.0 <= nivel_tolerancia <= 1.0):
        return jsonify({"error": "Nivel fuera de rango"}), 400

    conn = get_connection()
    cursor = conn.cursor()
    cursor.execute("UPDATE users SET nombre_visible=%s, nivel_tolerancia=%s WHERE id=%s",
                   (nombre_visible, nivel_tolerancia, user_id))
    conn.commit()
    return jsonify({"msg": "Perfil actualizado exitosamente"})
Evaluación de toxicidad en texto
Simulación de análisis de toxicidad en mensajes de usuario:
def evaluar_toxicidad(texto):
    palabras_toxicas = ["odio", "tonto", "estúpido"]
    for palabra in palabras_toxicas:
        if palabra in texto.lower():
            return 0.9  # Muy tóxico
    return 0.1  # No tóxico
Exportación de datos a PDF en React
Función para exportar contenido como PDF usando html2pdf.js:
const exportarPDF = () => {
  const element = document.getElementById("contenedor-pdf");
  const options = {
    margin: 0.5,
    filename: "reporte_financiero.pdf",
    image: { type: "jpeg", quality: 0.98 },
    html2canvas: { scale: 2 },
    jsPDF: { unit: "in", format: "letter", orientation: "portrait" },
  };
  html2pdf().set(options).from(element).save();
};
Configuración de JWT en Flask
Configuración básica para proteger rutas con JWT:
from flask_jwt_extended import JWTManager

app = Flask(__name__)
app.config["JWT_SECRET_KEY"] = "clave_secreta_123"
jwt = JWTManager(app)

@app.route('/protegido')
@jwt_required()
def protegido():
    usuario_id = get_jwt_identity()
    return jsonify({"mensaje": f"Acceso válido para el usuario {usuario_id}"})
← Volver