Outils pour utilisateurs

Outils du site


Panneau latéral

Plan du Site:

python:flask:formulaires

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 :

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-select") }}
    </div>
 
    <div>
        {{ form.submit(class="btn btn-primary") }}
        <a class="btn btn-secondary" href="javascript:history.back()">Annuler</a>
    </div>
</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 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)
python/flask/formulaires.txt · Dernière modification: 2023/11/10 07:16 par marclebrun