- ¿Qué es "actualizar una entidad"?
- Paso 1: Mostrar el Formulario de Edición
- Paso 2: Procesar el Formulario y Guardar Cambios
- Consideraciones sobre los Métodos HTTP
En esta lección, aprenderemos a actualizar una entidad (como una escuela) en una app de Flask. Ya viste cómo crear una, ¿verdad? Ahora, actualizar es similar, pero con algunos pasos extra.
Vamos a hacerlo fácil y paso a paso: primero veremos cómo mostrar un formulario para editar y luego cómo procesarlo cuando se envíe.
¿Qué es "actualizar una entidad"?
Actualizar una entidad tiene dos partes:
1️⃣ Mostrar la información actual de la entidad en un formulario (para editar).
2️⃣ Recibir ese formulario ya editado y guardar los cambios.
Paso 1: Mostrar el Formulario de Edición
Para empezar, necesitamos un formulario que muestre los datos actuales de la entidad (en este caso la escuela), y permita modificarlos.
Ruta para ver el formulario de edición
@app.route('/schools/<id>/edit')
def schools_edit(id):
repo = SchoolRepository() # Repositorio que accede a los datos
school = repo.find(id) # Buscamos la escuela por su ID
errors = [] # Inicializamos lista de errores vacía
# Renderizamos el formulario de edición pasando la escuela encontrada
return render_template(
'schools/edit.html',
school=school,
errors=errors
)
Código HTML de la plantilla de edición (edit.html)
<form action="{{ url_for('schools_patch', id=school.id) }}" method="post">
<div>
<label>
Nombre *
<input type="text" name="name" value="{{ school.name }}">
</label>
{% if errors %}
<div>{{ errors.name }}</div>
{% endif %}
</div>
<input type="submit" value="Actualizar">
</form>
- Este formulario llena automáticamente el campo "Nombre" con el valor actual de la escuela.
- Si hay errores, se muestran justo debajo del campo.
Paso 2: Procesar el Formulario y Guardar Cambios
Después de que el usuario envía el formulario, necesitamos procesar esos datos:
- Validar que los datos sean correctos.
- Actualizar los valores en el objeto escuela.
- Guardar los nuevos datos en la base.
- Redirigir al usuario o mostrar errores si los hay.
Ruta que recibe los datos del formulario
@app.route('/schools/<id>/patch', methods=['POST'])
def schools_patch(id):
repo = SchoolRepository()
school = repo.find(id)
data = request.form.to_dict() # Convertimos los datos recibidos a diccionario
errors = validate(data)
if errors:
# Si hay errores, volvemos a mostrar el formulario con errores
return render_template(
'schools/edit.html',
school=school,
errors=errors
), 422
# Asignamos manualmente los nuevos valores
school['name'] = data['name']
repo.save(school) # Guardamos los cambios en la base de datos
flash('La escuela ha sido actualizada', 'success')
return redirect(url_for('schools_index'))
Podrías pensar: “¿por qué no reemplazamos todo de una vez con school = data?”. El problema es que eso sería inseguro. Un usuario malicioso podría enviar datos que no queremos que cambien (como el ID o cosas delicadas). Por eso, asignamos solo los campos que realmente permitimos editar.
Consideraciones sobre los Métodos HTTP
En una API bien diseñada, para actualizar usamos los métodos HTTP:
| Método | Usado para |
|---|---|
| POST | Crear una entidad |
| PUT | Actualizar toda la entidad |
| PATCH | Actualizar parte de la entidad |
Sin embargo, HTML solo permite usar GET y POST en los formularios. Entonces usamos POST para todo, aunque semánticamente no sea del todo correcto. Para diferenciar las acciones, usamos rutas diferentes como:
/schools/<id>/edit– mostrar el formulario/schools/<id>/patch– procesar los cambios
Este enfoque es un compromiso, porque Flask no decide el comportamiento del navegador. Solo gestiona cómo respondemos a una URL.
En frameworks más avanzados como Django o Rails, existen herramientas (como Form Builders) que hacen este trabajo automáticamente, asignando y validando campos de forma segura.
Pero como estamos usando Flask (que es más liviano), hacemos este proceso manualmente para tener control total y entender mejor lo que pasa.
Resumen
- Actualizar una entidad implica mostrar un formulario con los datos actuales y luego guardar los cambios.
- Usamos dos rutas: una para mostrar el formulario y otra para procesar los datos enviados.
- La asignación de datos se hace manualmente por seguridad.
- Aunque debería usarse PATCH o PUT para actualización, HTML solo permite GET y POST, así que usamos POST.
- Flask maneja rutas, pero no el comportamiento del formulario; eso depende del navegador.
Trabajo independiente
- Implementa la actualización de usuarios.
Aplicación de referencia
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.