Définition du formulaire dans une classe.
from flask_wtf import FlaskForm from wtforms import StringField, SelectField, BooleanField, SubmitField from wtforms.validators import DataRequired class PersonneEditForm(FlaskForm): nom = StringField(u"Nom", validators=[DataRequired()]) prenom = StringField(u"Prénom", validators=[DataRequired()]) genre = SelectField(u"Genre", choices=[ ('m', u"Masculin"), ('f', u"Féminin"), ]) actif = BooleanField(u"Actif") submit = SubmitField(u"Enregistrer")
Intégration de ce formulaire dans un template :
<form action="" method="post"> {{ form.hidden_tag() }} <div class="form-group"> {{ form.nom.label(class="form-label") }} {{ form.nom(class="form-input") }} </div> <div class="form-group"> {{ form.prenom.label(class="form-label") }} {{ form.prenom(class="form-input") }} </div> <div class="form-group"> {{ form.genre.label(class="form-label") }} {{ form.genre(class="form-select") }} </div> <div> {{ form.submit(class="btn btn-primary") }} <a class="btn btn-secondary" href="javascript:history.back()">Annuler</a> </div> </form>
Utilisation du formulaire dans un Blueprint.
from flask import render_template, url_for, abort, redirect from myforms import PersonneEditForm # ... @personnes.route("/<int:id>/edit", methods=['GET', 'POST']) def edit(id=0): if id == 0: personne = # création d'un nouvel objet else: personne = # lecture d'un l'objet existant # si l'objet à éditer a bien été lu ou créé if personne: # créer une instance du formulaire form = PersonneEditForm() # si le formulaire a été soumis et validé if form.validate_on_submit(): # enregistrer l'objet personne.nom = form.nom.data personne.prenom = form.prenom.data personne.genre = form.genre.data if id == 0: # si 0 on est dans l'ajout d'un nouvel objet db.session.add(personne) # valider l'enregistrement dans la db db.session.commit() # rediriger vers l'index return redirect(url_for('personnes.index')) # sinon il faut le remplir et l'afficher form.nom.data = personne.nom form.prenom.data = personne.prenom form.genre.data = personne.genre return render_template("personne.edit.html", form = form) else: # l'objet n'existe pas abort(404)