Regístrate para acceder a más de 15 cursos gratuitos de programación con un simulador

Persistencia Python: Desarrollo web con Flask

Ya llevas buen rato aprendiendo Python y es hora de comenzar a ver cómo se comportan las aplicaciones del mundo real, especialmente cuando hablamos de sitios web. En esta lección vamos a hablar sobre un tema clave: cómo los sitios web guardan la información que usan.


¿Qué es un sitio web estático?

Primero hablemos de los sitios más simples: los sitios estáticos.

El sitio web estático es como una carpeta llena de archivos HTML que ya están listos para ser mostrados al usuario. No responden a lo que tú haces, solamente muestran “lo que ya está escrito”.

Características de los sitios estáticos:

  • Muy rápidos y fáciles de hacer.
  • No necesitan guardar datos de usuarios.
  • La información se guarda directamente en archivos HTML.

Para crear este tipo de sitios se usan herramientas llamadas generadores de sitios estáticos, como Jekyll, que convierten tus archivos de texto en HTML listo para publicarse.


¿Y qué pasa con los otros sitios web?

La mayoría de los sitios web hoy no son estáticos, porque permiten interacción con el usuario.

¿Qué tipo de interacción? Cosas como:

📝 Registrarse

💭 Dejar comentarios

📷 Subir fotos

Todos esos datos generados por el usuario tienen que ser guardados en alguna parte.

¿Y qué opciones hay para guardar datos?

Cuando uno comienza, piensa: “¡Guardo los datos en un archivo y ya!”. Pero eso funciona solo si tienes un usuario o dos. En el mundo real, donde pueden entrar miles de personas al mismo tiempo, guardar en archivos puede generar errores.

¿Por qué?

Porque varios procesos pueden intentar modificar el mismo archivo al mismo tiempo. Eso se llama un problema de concurrencia.

Aquí es donde entran las bases de datos.


¿Qué es la persistencia?

Hay un término clave aquí: persistencia, que significa que los datos se guardan para que no se pierdan si se apaga el sistema, o si cierras el navegador.

Para lograr esta persistencia se usan sistemas especializados llamados bases de datos.


Formas de interactuar con bases de datos

Una vez que tenemos una base de datos, necesitamos una forma de enviarle datos o preguntar cosas. Hay dos maneras principales:

Usar una biblioteca que se conecta directamente

Python, por ejemplo, ofrece la biblioteca sqlite3 que se conecta directamente a una base de datos SQLite:

Documentación SQLlite en Python

Usar un ORM

Una opción más moderna y flexible es usar un ORM (Object-Relational Mapper).

El ORM más común en Flask es SQLAlchemy. Este permite trabajar con datos como si fueran objetos de Python. Tú no piensas en “tablas” directamente, sino en cosas como usuarios o productos.

Veamos un ejemplo:


# Guardar un nuevo usuario con SQLAlchemy
user = User(
    username=request.form['username'],  # Se toma el dato del formulario
    email=request.form['email']         # Se toma el email enviado por el usuario
)

# Se agrega a la base de datos
db.session.add(user)
db.session.commit()  # Se guarda de forma permanente

Con esto, los datos se guardan de forma permanente en la base de datos.


¿Qué usaremos en este curso?

Aunque las bases de datos son fundamentales, aprender a usarlas bien toma tiempo. Como lo que queremos ahorita es enfocarnos en la lógica web, vamos a guardar los datos en lo que se llama una sesión.

La sesión es un espacio temporal para guardar información sobre un usuario mientras navega por el sitio. Internamente, funciona usando cookies y tecnologías del navegador.

Repositorios:

En el curso vamos a usar algo llamado repositorios, que son clases que nos ayudan a gestionar la información sin tener que pensar en los detalles de almacenamiento.

Por ejemplo, para guardar usuarios usaremos un UserRepository.

Veamos cómo funciona:


from flask import Flask
from data import UserRepository

import os

app = Flask(__name__)

# Se configura una clave secreta para manejar las sesiones
app.config['SECRET_KEY'] = os.getenv('SECRET_KEY')

# Creamos el repositorio
repo = UserRepository()

# Guardamos un nuevo usuario
repo.save(user)

# También podemos guardar otro
repo.save(user2)

# Y luego buscarlos:
usuario_encontrado = repo.find(user.id)

# O ver todos los usuarios guardados
todos = repo.content()
¿Y qué pasa si quiero guardar carros, productos u otra cosa?

Cada tipo de dato tiene su propio repositorio:

Entidad Repositorio correspondiente
Usuario UserRepository
Carro CarRepository
Producto ProductRepository

Estos repositorios están hechos específicamente para este curso y no forman parte de Flask ni del ORM. Son herramientas diseñadas para ayudarte a entender cómo se organiza la lógica de una verdadera aplicación.


Resumen

  • Los sitios estáticos no necesitan guardar datos, porque ya todo está en archivos HTML.
  • Para sitios interactivos se requiere guardar información que los usuarios generan.
  • Para guardar datos persistentes se usan bases de datos.
  • Puedes usar bibliotecas directas o un ORM como SQLAlchemy para interactuar con bases de datos.
  • En este curso, usaremos sesiones y repositorios para simular almacenamiento mientras aprendemos sobre desarrollo web.
  • Los repositorios te dan acceso organizado a los datos de forma simple y coherente.

Nos vemos en la próxima lección donde trabajaremos más directamente con sesiones y repositorios.

Para acceder completo a curso necesitas un plan básico

El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.

Obtener acceso
130
cursos
1000
ejercicios
2000+
horas de teoría
3200
test

Obtén acceso

Cursos de programación para principiantes y desarrolladores experimentados. Comienza tu aprendizaje de forma gratuita

  • 130 cursos, 2000+ horas de teoría
  • 1000 ejercicios prácticos en el navegador
  • 360 000 estudiantes
Al enviar el formulario, aceptas el «Política de privacidad» y los términos de la «Oferta», y también aceptas los «Términos y condiciones de uso»

Nuestros graduados trabajan en empresas como:

Bookmate
Health Samurai
Dualboot
ABBYY