En el desarrollo web, los sistemas CRUD (Crear, Leer, Actualizar, Eliminar) son fundamentales para gestionar datos. Python, gracias a su simplicidad y potentes frameworks como Flask y Django, es ideal para construir aplicaciones CRUD rápidamente.
En este artículo, aprenderás a crear un sistema CRUD básico usando Flask (un microframework ligero) y una base de datos SQLite. Además, destacaremos las partes críticas donde debes tener especial cuidado para evitar errores comunes.
🔹 Requisitos Previos Antes de empezar, necesitas:
- Python 3.8 o superior instalado.
- Conocimientos básicos de Python y
- Un editor de código como VS Code o PyCharm.
Instala Flask con el siguiente comando:
pip install flask
🔹 Paso 1: Configuración Inicial del Proyecto
Crea una carpeta para tu proyecto y dentro de ella, un archivo llamado app.py.
from flask import Flask, render_template, request, redirect, url_for
app = Flask(__name__)
# Base de datos temporal (en memoria)
tasks = []
@app.route('/')
def index():
return render_template('index.html', tasks=tasks)
if __name__ == '__main__':
app.run(debug=True)
📌 Cuidado aquí:
Asegúrate de que Flask esté correctamente instalado. El modo debug=True es útil en desarrollo, pero nunca lo uses en producción.
🔹 Paso 2: Crear las Plantillas HTML
Flask usa Jinja2 para renderizar plantillas. Crea una carpeta llamada templates y dentro, un archivo index.html:
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Sistema CRUD con Flask</title>
</head>
<body>
<h1>Lista de Tareas</h1>
<form action="/add" method="POST">
<input type="text" name="task" placeholder="Nueva tarea" required>
<button type="submit">Agregar</button>
</form>
<ul>
{% for task in tasks %}
<li>
{{ task }}
<a href="/delete/{{ loop.index0 }}">Eliminar</a>
</li>
{% endfor %}
</ul>
</body>
</html>
📌 Cuidado aquí:
Usa method="POST" en formularios que modifican datos.
Siempre valida los datos en el backend para evitar inyecciones maliciosas.
🔹 Paso 3: Implementar las Operaciones CRUD
🔸 Crear (Create) Añade esta ruta a app.py:
@app.route('/add', methods=['POST'])
def add():
task = request.form.get('task')
if task:
tasks.append(task)
return redirect(url_for('index'))
📌 Cuidado aquí:
Siempre verifica que los datos no estén vacíos (if task:).
🔸 Eliminar (Delete) Agrega esta función para borrar tareas:
@app.route('/delete/<int:task_id>')
def delete(task_id):
if 0 <= task_id < len(tasks):
tasks.pop(task_id)
return redirect(url_for('index'))
📌 Cuidado aquí:
Valida que el task_id esté dentro del rango para evitar errores.
🔸 Actualizar (Update) Para editar tareas, añade:
@app.route('/edit/<int:task_id>', methods=['GET', 'POST'])
def edit(task_id):
if request.method == 'POST':
new_task = request.form.get('task')
if new_task and 0 <= task_id < len(tasks):
tasks[task_id] = new_task
return redirect(url_for('index'))
return render_template('edit.html', task=tasks[task_id], task_id=task_id)
Crea templates/edit.html:
<form action="/edit/{{ task_id }}" method="POST">
<input type="text" name="task" value="{{ task }}" required>
<button type="submit">Actualizar</button>
</form>
📌 Cuidado aquí:
Usa methods=['GET', 'POST'] para manejar ambas solicitudes.
Protege contra Cross-Site Request Forgery (CSRF) en producción.
🔹 Paso 4: Usar una Base de Datos SQLite
Para persistencia de datos, reemplaza la lista tasks con SQLite:
import sqlite3
from flask import g
DATABASE = 'database.db'
def get_db():
db = getattr(g, '_database', None)
if db is None:
db = g._database = sqlite3.connect(DATABASE)
return db
@app.teardown_appcontext
def close_db(error):
db = getattr(g, '_database', None)
if db is not None:
db.close()
def init_db():
with app.app_context():
db = get_db()
cursor = db.cursor()
cursor.execute('CREATE TABLE IF NOT EXISTS tasks (id INTEGER PRIMARY KEY, task TEXT)')
db.commit()
📌 Cuidado aquí:
Cierra siempre las conexiones a la base de datos (close_db).
Usa consultas parametrizadas para evitar SQL Injection.
🔹 Paso 5: Despliegue Seguro
Si subes tu app a producción:
Usa Gunicorn o Waitress en lugar del servidor de desarrollo.
Configura HTTPS para seguridad.
Evita almacenar contraseñas en el código (usa variables de entorno).
🔹 Conclusión Hemos creado un sistema CRUD en Python con Flask, desde la configuración inicial hasta el manejo de una base de datos SQLite. Las partes más críticas son: ✅ Validación de datos.
✅ Manejo seguro de la base de datos.
✅ Protección contra CSRF y SQL Injection.
Este proyecto es un excelente punto de partida para aplicaciones más complejas. ¿Qué funcionalidades añadirías? ¡Déjanos tus comentarios!
📢 ¿Te gustó el artículo? Compártelo en redes sociales y síguenos para más tutoriales de Python y desarrollo web. 🚀
Comentarios