Outils pour utilisateurs

Outils du site


Panneau latéral

Plan du Site:

python:flask:formulaires

Ceci est une ancienne révision du document !


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")
    cancel = SubmitField(u"Annuler")

Template

Intégration de ce formulaire dans un template :

personne.edit.html
<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-input") }}
    </div>
    {{ form.submit(class="btn btn-primary") }}
    {{ form.cancel(class="btn btn-secondary") }}
</form>

Traitement

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
        if form.is_submitted():
 
            # si on a validé avec le bouton "Annuler"
            if form.cancel.data:
                return redirect(url_for('personnes.index'))
 
            # si on a validé avec le bouton "Enregistrer"
            if form.submit.data:
                # si tous les champs du formulaire sont valides
                if form.validate():
                    # 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)
python/flask/formulaires.1698855348.txt.gz · Dernière modification: 2023/11/01 16:15 par marclebrun