====== Formulaires ====== ===== Classe formulaire ===== 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") ===== Template ===== Intégration de ce formulaire dans un template :
{{ form.hidden_tag() }}
{{ form.nom.label(class="form-label") }} {{ form.nom(class="form-input") }}
{{ form.prenom.label(class="form-label") }} {{ form.prenom(class="form-input") }}
{{ form.genre.label(class="form-label") }} {{ form.genre(class="form-select") }}
{{ form.submit(class="btn btn-primary") }} Annuler
===== Traitement ===== Utilisation du formulaire dans un Blueprint. from flask import render_template, url_for, abort, redirect from myforms import PersonneEditForm # ... @personnes.route("//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)