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 :
===== 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)