En este apartado vamos a estudiar como modificar un registro en nuestra base de datos.
Lo primero es insertar un enlace en la página principal que nos permita modificar artículos (se añade un enlace por cada artículo), para ello en la plantilla inicio.html
:
<td><a href="{{url_for('articulos_edit',id=art.id)}}"><span class="glyphicon glyphicon-pencil"></span> Modificar</a></td>
-
Vamos a usar el mismo formulario (
formArticulo
) que hemos utilizado en la unidad anterior para añadir nuevos artículos, para realizar la modificación. -
Vamos a utilizar el mismo template
articulos_new.html
para mostrar el formulario. -
En el programa principal, vamos a crear una ruta dinámica, que nos permite modificar un registro según su identificador:
@app.route('/articulos/<id>/edit', methods=["get","post"])
-
Lo primero que hacemos es seleccionar el artículo según el identificador recibido en la ruta, sino existe el artículo devolvemos un error:
art=Articulos.query.get(id) if art is None: abort(404)
-
Creamos un nuevo formulario. Este formulario va a recibir la información que hemos introducido y enviado por el método POST y la información del fichero que hemos subido, sin embargo al entrar por primera vez (método GET) se va a rellenar con lo datos del objeto
Articulos
que hemos seleccionado:form=formArticulo(obj=art)
-
Si el formulario es válido:
... if form.validate_on_submit(): #Borramos la imagen anterior if form.photo.data: os.remove(app.root_path+"/static/upload/"+art.image) try: f = form.photo.data nombre_fichero=secure_filename(f.filename) f.save(app.root_path+"/static/upload/"+nombre_fichero) except: nombre_fichero="" else: nombre_fichero=art.image form.populate_obj(art) art.image=nombre_fichero db.session.commit() return redirect(url_for("inicio"))
Se realizan las siguientes acciones:
- Si hemos subido otra imagen se elimina la anterior.
- Se intenta guardar el fichero que se ha subido en el formulario.
- Si no se ha subido ninguno el nombre la imagen sigue siendo la anterior.
- Se modifica el objeto
Articulos
al rellenar con los datos del formulario (form.populate_obj(art)
).
-
Si el formulario no es válido se vuelve a generar la plantilla con el formulario con datos, mostrando si lo hemos codificado los errores de validación oportunos.
De una forma similar puedes estudiar el código para ver cómo se modifican las categorías en nuestra base de datos.