Creando registros en la base de datos
En este apartado vamos a estudiar como insertar un registro en nuestra base de datos.
Creando nuevos artículos
Lo primero es insertar un enlace en la página principal que nos permita insertar nuevos artículos, para ello en la plantilla inicio.html
:
<a class="btn btn-primary" href="{{url_for('articulos_new')}}" role="button">Nuevo videojuego</a>
Para realizar nuestra operación vamos a crear un formulario que nos permite introducir los datos del nuevo artículo, para ello en el fichero forms.py
creamos una nueva clase formulario con la siguiente sintaxis:
class formArticulo(FlaskForm):
nombre=StringField("Nombre:",validators=[Required("Tienes que introducir el dato")])
precio=DecimalField("Precio:",default=0,validators=[Required("Tienes que introducir el dato")])
iva=IntegerField("IVA:",default=21,validators=[Required("Tienes que introducir el dato")])
descripcion= TextAreaField("Descripción:")
photo = FileField('Selecciona imagen:')
stock=IntegerField("Stock:",default=1,validators=[Required("Tienes que introducir el dato")])
CategoriaId=SelectField("Categoría:",coerce=int)
submit = SubmitField('Enviar')
Como novedad en el códigoo anterior hemos utilizado el atributo coerce
del objeto SelectField
que indica el tipo de datos que va a devolver, en este caso un entero que es el índice de las categorías.
En el programa principal hemos añadido una nueva ruta para añadir los nuevos artículos:
@app.route('/articulos/new', methods=["get","post"])
def articulos_new():
form=formArticulo()
categorias=[(c.id, c.nombre) for c in Categorias.query.all()[1:]]
form.CategoriaId.choices = categorias
if form.validate_on_submit():
try:
f = form.photo.data
nombre_fichero=secure_filename(f.filename)
f.save(app.root_path+"/static/upload/"+nombre_fichero)
except:
nombre_fichero=""
art=Articulos()
form.populate_obj(art)
art.image=nombre_fichero
db.session.add(art)
db.session.commit()
return redirect(url_for("inicio"))
else:
return render_template("articulos_new.html",form=form)
Como habíamos visto en unidades anteriores:
- La primera vez que accedemos a la ruta accedemos utilizando el método GET. En nuestro caso se creará un formulario sin datos (ya que
request.form
no tiene ningún dato) , el formulario no se ha enviado y por lo tanto se devuelve la plantilla con el formulario vacío. - Se rellena el formulario y se manda la información a la misma ruta pero utilizando el método POST. En este caso se crea un formulario que se rellena con la información que se ha recibido del formulario (en el que añadimos la lista de categorías al campo
categorias
). - Si el formulario es válido se gestiona la información y se realiza las siguientes acciones:
- Se guarda el fichero que se ha subido el formulario.
- Se crea un nuevo objeto
Articulos
y se rellena 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.
En la plantilla articulos_new.html
puedes ver cómo se ha generado la página donde se muestra el formulario.
Creando nuevas categorías
De una forma similar puedes estudiar el código para ver cómo se añaden nuevas categorías a nuestra base de datos.