Backend: Conectando Todo con Flask – Dándole Vida al SaaS - Episodio 4

Backend conectando todo con Flask

Hoy es un día clave en el desarrollo de este SaaS. Después de definir la base de datos y el modelo de datos, toca empezar a darle vida a todo esto con Flask.

Índice
  1. Cuando el Proyecto Empieza a Respirar. 📅 Diario de un SaaS
  2. 🛠️ Preparando el Entorno de Desarrollo (Y Primeros Bloqueos)
  3. 🚀 Creando el Proyecto Flask y Conectando la Base de Datos
    1. Configurando la Conexión a PostgreSQL
  4. 🔐 Implementando la Autenticación con JWT
  5. 🛠️ Creando las Primeras Rutas de la API
  6. 📌 Lo Que Aprendí Hasta Ahora
  7. 📅 ¿Qué Sigue en el Desarrollo del SaaS?
  8. 🚀 Reflexión Final: El Backend Es Como un Motor, Sin Él No Hay Nada

Cuando el Proyecto Empieza a Respirar. 📅 Diario de un SaaS

Si hasta ahora el proyecto era solo teoría, ahora empieza la parte práctica:
🔹 Conectar Flask con PostgreSQL.
🔹 Crear las primeras rutas de la API.
🔹 Autenticar usuarios con JWT.
🔹 Hacer las primeras pruebas con Postman.

Aquí es donde las cosas empiezan a moverse… y también donde aparecen los primeros problemas.

🛠️ Preparando el Entorno de Desarrollo (Y Primeros Bloqueos)

Antes de escribir una sola línea de código, tuve que asegurarme de que todo estaba bien configurado en mi equipo.

📌 Para desarrollar con Flask y PostgreSQL, necesitas instalar varias herramientas:
Python → Para el backend.
PostgreSQL → La base de datos.
pgAdmin → Para gestionar PostgreSQL visualmente.
Postman → Para probar la API.
Flask y SQLAlchemy → Para interactuar con la base de datos.

Pero claro, no todo salió bien a la primera.

💡 Problema 1: Instalé una versión de Python que no era compatible con algunas librerías.
💡 Problema 2: PostgreSQL no se conectaba con Flask porque olvidé configurar las credenciales correctamente.
💡 Problema 3: Postman me devolvía errores de autenticación en las primeras pruebas.

Como sé que esto puede ser un dolor de cabeza para cualquiera, he preparado una guía con todos los pasos exactos que seguí para instalar y configurar todo.

📥 💾 Descarga Gratis mi Guía Paso a Paso
Si quieres evitarte los problemas que tuve, aquí tienes un PDF con las instrucciones completas.
🔗 [Descargar Guía]


🚀 Creando el Proyecto Flask y Conectando la Base de Datos

Con el entorno ya listo, lo primero fue crear el proyecto Flask:

bash
mkdir mi_saas
cd mi_saas
python -m venv venv
source venv/bin/activate # En Windows: venv\Scripts\activate
pip install flask flask_sqlalchemy flask_jwt_extended

Con esto, ya tenía mi entorno virtual y Flask instalado.

Configurando la Conexión a PostgreSQL

Aquí toca decirle a Flask cómo conectarse a la base de datos. En app.py, agregué:

python
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://usuario:contraseña@localhost:5432/mi_saas'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = Falsedb = SQLAlchemy(app)

Parece sencillo, ¿no? Pues no lo fue.

💡 Error que encontré: PostgreSQL no permitía conexiones porque el usuario que creé no tenía los permisos correctos.
📌 Solución: Tuve que entrar a pgAdmin y darle acceso manualmente.


🔐 Implementando la Autenticación con JWT

Un SaaS necesita autenticación segura. Para eso, configuré JWT (JSON Web Tokens).

bash
pip install flask_jwt_extended flask_bcrypt

En app.py, agregué la configuración para manejar sesiones con tokens JWT:

python

from flask_jwt_extended import JWTManager

app.config['JWT_SECRET_KEY'] = 'supersecreto'
jwt = JWTManager(app)

Y creé una ruta para que los usuarios puedan registrarse:

python
from flask import request, jsonify
from flask_bcrypt import Bcrypt
from flask_jwt_extended import create_access_token
bcrypt = Bcrypt(app)@app.route('/register', methods=['POST'])
def register():
data = request.get_json()
hashed_password = bcrypt.generate_password_hash(data['password']).decode('utf-8')

nuevo_usuario = User(username=data['username'], email=data['email'], password=hashed_password)
db.session.add(nuevo_usuario)
db.session.commit()

return jsonify({"message": "Usuario registrado con éxito"}), 201

📌 Lo que aprendí aquí:
Nunca almacenes contraseñas en texto plano. Usa bcrypt para cifrarlas.
Siempre devuelve mensajes de error claros en la API.


🛠️ Creando las Primeras Rutas de la API

Una vez que tenía la autenticación lista, agregué la primera ruta protegida para probar JWT:

python

from flask_jwt_extended import jwt_required, get_jwt_identity

@app.route('/perfil', methods=['GET'])
@jwt_required()
def perfil():
usuario = get_jwt_identity()
return jsonify(message=f"Bienvenido, {usuario}"), 200

Prueba en Postman:
1️⃣ Registré un usuario en /register.
2️⃣ Inicié sesión y recibí un token.
3️⃣ Probé la ruta /perfil con el token…

📌 Y funcionó! 🎉 (Después de varios intentos fallidos 🙈).


📌 Lo Que Aprendí Hasta Ahora

🔥 Configurar bien el entorno de desarrollo desde el inicio ahorra muchos problemas.
🔥 PostgreSQL necesita permisos correctos para conectarse con Flask.
🔥 Autenticación con JWT es sencilla, pero hay que manejar bien los tokens.
🔥 Probar cada cambio con Postman evita problemas más adelante.


📅 ¿Qué Sigue en el Desarrollo del SaaS?

Ahora que el backend está en marcha, el siguiente paso es construir el motor de búsqueda inteligente.

📌 En el próximo post veremos cómo:
Implementar una búsqueda eficiente con IA y sinónimos.
Optimizar las consultas para velocidad y precisión.
Mostrar los resultados de forma clara para los usuarios.


🚀 Reflexión Final: El Backend Es Como un Motor, Sin Él No Hay Nada

Hoy realmente siento que el SaaS ha cobrado vida. Pasó de ser solo una idea en papel a algo funcional, con usuarios, autenticación y conexión a la base de datos.

💬 ¿Te has encontrado con problemas similares en tus proyectos? Cuéntamelo en los comentarios.

📢 Nos vemos en el próximo post, donde mejoraremos la seguridad

Si quieres conocer otros artículos parecidos a Backend: Conectando Todo con Flask – Dándole Vida al SaaS - Episodio 4 puedes visitar la categoría Proyecto-IA.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir