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

CRUD Python: Desarrollo web con Flask

¿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:

  1. Traer la lista de escuelas desde un repositorio o base de datos.
  2. Pasar esos datos a la plantilla HTML.
  3. 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

  1. Tomar el ID desde la URL.
  2. Buscar la escuela en nuestro repositorio usando ese ID.
  3. Pasar los datos a la plantilla.
  4. 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

  1. Ajusta las rutas y sus nombres de acuerdo con el esquema indicado arriba.
  2. Modifica la obtención de usuarios para que los datos se tomen desde un archivo.

Aplicación de referencia


Materiales adicionales

  1. RESTFull Routing
  2. Scaffolding
  3. Paginación

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