- ¿Qué es CRUD y por qué es importante?
- ¿Qué implica construir un CRUD completo?
- Enrutamiento básico para CRUD
- Cómo nombrar las funciones (naming)
- Mostrar Lista de Escuelas (Ruta index)
- Mostrar una Escuela Específica (Ruta show)
¿Sabías que buena parte de lo que hacemos al desarrollar una app web se reduce a cuatro acciones? Estas son: crear, leer, actualizar y eliminar.
A esto se le conoce como operaciones CRUD (por sus siglas en inglés: Create, Read, Update, Delete).
📚 En esta lección, aprenderás qué es CRUD, para qué sirve y cómo crear tus primeras rutas en Flask para listar recursos (como escuelas de programación) y ver los detalles de uno en específico.
¿Qué es CRUD y por qué es importante?
El término CRUD se usa en programación para describir las acciones básicas que podemos hacer sobre cualquier entidad o recurso, como usuarios, productos, publicaciones, etc.
| Acción | Nombre en inglés | Función principal | Ejemplo en una web |
|---|---|---|---|
| Crear | Create | Añadir una nueva entidad al sistema | Crear cuenta |
| Leer | Read | Consultar información | Ver perfil |
| Actualizar | Update | Cambiar datos existentes | Editar datos |
| Eliminar | Delete | Quitar entidades del sistema | Borrar usuario |
Vamos a trabajar con un recurso llamado “school” (escuela), para construir un mini catálogo de escuelas de programación.
¿Qué implica construir un CRUD completo?
Un desarrollador debe crear varias partes para que un CRUD funcione correctamente:
- Definir la entidad (por ejemplo, la clase School)
- Crear la tabla en la base de datos
- Codificar los controladores o manejadores
- Diseñar las plantillas HTML
- Crear rutas o endpoints que conecten todo
Aunque más adelante automatizaremos muchas de estas tareas, en este curso lo haremos paso a paso con Flask para entender bien cada parte.
Enrutamiento básico para CRUD
Estos son los endpoints (rutas) más comunes al construir un CRUD. En este caso el recurso es “schools”:
| Método HTTP | Ruta | Vista (template HTML) | Descripción |
|---|---|---|---|
| GET | /schools |
schools/index.html | Lista de escuelas |
| GET | /schools/{id} |
schools/show.html | Detalle de una escuela |
| GET | /schools/new |
schools/new.html | Formulario para nueva escuela |
| POST | /schools |
(sin plantilla) | Guardar nueva escuela |
| GET | /schools/{id}/edit |
schools/edit.html | Formulario para editar escuela |
| PATCH/PUT | /schools/{id} |
(sin plantilla) | Actualizar escuela existente |
| DELETE | /schools/{id} |
(sin plantilla) | Borrar escuela |
En este primer acercamiento, nos vamos a concentrar solo en dos rutas: listar todas las escuelas (index) y mostrar una escuela específica (show).
Cómo nombrar las funciones (naming)
Flask, al ser un microframework, no impone una estructura rígida para nombrar funciones. Pero, como buenas prácticas, usaremos nombres que indiquen claramente qué entidad y qué acción manejan.
⏬ Por ejemplo:
- Para mostrar la lista de escuelas:
schools_index - Para mostrar una escuela particular:
schools_show
Así el código es más legible y fácil de mantener.
Mostrar Lista de Escuelas (Ruta index)
Cuando un usuario visita la página /schools, queremos mostrarle una lista de todas las escuelas disponibles. Aquí hay un esquema básico del proceso:
- Traer la lista de escuelas desde un repositorio o base de datos.
- Pasar esos datos a la plantilla HTML.
- Mostrar los datos en una tabla usando un bucle.
Controlador (en Python)
@app.route('/schools')
def schools_index():
repo = SchoolRepository()
schools = repo.content() # obtenemos la lista de escuelas
return render_template(
'schools/index.html',
schools=schools # pasamos la lista a la plantilla
)
Plantilla HTML (schools/index.html)
<table>
{% for school in schools %}
<tr>
<td>{{ school.id }}</td>
<td>
<a href="{{ url_for('schools_show', id=school.id) }}">
{{ school.name }}
</a>
</td>
</tr>
{% endfor %}
</table>
Mostrar una Escuela Específica (Ruta show)
Cuando alguien visita /schools/3 (por ejemplo), debe ver la información sobre la escuela con ID 3.
Flujo del controlador
- Tomar el ID desde la URL.
- Buscar la escuela en nuestro repositorio usando ese ID.
- Pasar los datos a la plantilla.
- Mostrarlo de forma clara y atractiva.
Controlador (Python)
@app.route('/schools/<id>')
def schools_show(id):
repo = SchoolRepository()
school = repo.find(id) # buscar escuela por su ID
if not school:
abort(404) # si no se encuentra, lanzar error 404
return render_template(
'schools/show.html',
school=school
)
Plantilla HTML (schools/show.html)
<div>
ID: {{ school.id }}<br>
Nombre: {{ school.name }}
</div>
Manejar errores: página no encontrada
Flask nos permite manejar errores como el 404 cuando algo no existe:
@app.errorhandler(404)
def not_found(error):
return 'Oops! Página no encontrada', 404
Resumen
- CRUD representa las operaciones básicas sobre los datos: Crear, Leer, Actualizar y Borrar.
- Las rutas siguen un patrón claro y predecible.
- Flask permite manejar errores como el 404 si algo no se encuentra.
- Nombrar bien las funciones ayuda a mantener el código claro y ordenado.
En la próxima lección aprenderemos a crear nuevas escuelas (Create).
Trabajo independiente
- Ajusta las rutas y sus nombres de acuerdo con el esquema indicado arriba.
- Modifica la obtención de usuarios para que los datos se tomen desde un archivo.
Aplicación de referencia
Materiales adicionales
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.