Laboratorio. Trabajando con Flask
Completion requirements
8. API Restful
8.4. PUT
Importamos las librería:
from flask import request
from datetime import datetime
Código para productos
@app.route("/api/productos/<int:pid>", methods=["PUT"])
def actualizar_producto(pid):
data = request.get_json(silent=True)
if not data:
return jsonify({"error": "No se ha enviado JSON"}), 400
# Campos permitidos (no tocamos id ni fecha_creacion)
permitidos = ["nombre", "descripcion", "precio", "stock", "disponible", "categoria_id"]
cambios = {k: data[k] for k in permitidos if k in data}
if "disponible" in cambios:
cambios["disponible"] = 1 if cambios["disponible"] else 0
if not cambios:
return jsonify({"error": "No hay campos válidos para actualizar"}), 400
with engine.begin() as conn:
existe = conn.execute(
select(productos_t.c.id).where(productos_t.c.id == pid)
).first()
if not existe:
return jsonify({"error": "Producto no encontrado"}), 404
conn.execute(
productos_t.update()
.where(productos_t.c.id == pid)
.values(**cambios)
)
producto = conn.execute(
select(productos_t).where(productos_t.c.id == pid)
).mappings().first()
return jsonify(dict(producto))
Lo probamos con postman o con curl:
curl -X PUT http://127.0.0.1:5000/api/productos/6 \
-H "Content-Type: application/json" \
-d '{
"precio": 30.99,
"stock": 20,
"disponible": false
}'