Outils pour utilisateurs

Outils du site


python:flask:formulaires

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
python:flask:formulaires [2020/12/03 06:55]
marclebrun
python:flask:formulaires [2023/11/10 07:16] (Version actuelle)
marclebrun [Traitement]
Ligne 1: Ligne 1:
 ====== Formulaires ====== ====== Formulaires ======
  
-Le formulaire ​en lui-même peut être écrit directement dans +===== Classe ​formulaire ​=====
-un template :+
  
-<code html mon_joli_formulaire.html> +Définition du formulaire dans une classe.
-<​h1>​Formulaire</​h1>​+
  
-<form method="​POST">+<code python>​ 
 +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"​) 
 +</​code>​ 
 + 
 +===== Template ===== 
 + 
 +Intégration de ce formulaire dans un template : 
 + 
 +<code html personne.edit.html>​ 
 +<​form ​action="" ​method="​post"> 
 +    {{ form.hidden_tag() }} 
 +    ​
     <div class="​form-group">​     <div class="​form-group">​
-        ​<label for="name">​Nom</​label>​ +        ​{{ form.nom.label(class="form-label") }} 
-        ​<input type="​text" ​class="​form-control"​ id="​name"​ name="​name"/>+        ​{{ form.nom(class="​form-input") }}
     </​div>​     </​div>​
     ​     ​
-    ...+    ​<div class="​form-group">​ 
 +        {{ form.prenom.label(class="​form-label"​) }} 
 +        {{ form.prenom(class="​form-input"​) }} 
 +    </​div>​
     ​     ​
-    <button type="submit" class="​btn btn-primary">​Enregistrer</button>+    <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>​ </​form>​
 </​code>​ </​code>​
  
-Ensuite dans une vue on récupère les infos selon que le formulaire +===== Traitement ===== 
-a été posté (méthode POST) ou pas (méthode GET) :+ 
 +Utilisation du formulaire dans un Blueprint.
  
 <code python> <code python>
-from flask import render_template, ​requestredirecturl_for+from flask import render_template, ​url_forabortredirect 
 +from myforms import PersonneEditForm
  
-@app.route("/​formulaire", methods=["GET""POST"]) +# ... 
-def test_formulaire(): + 
-    if request.method ​== 'POST':+@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
         ​         ​
-        nom request.form['​name'​]+    # si l'​objet à éditer a bien été lu ou créé 
 +    if personne: 
 +     
 +        # créer une instance du formulaire 
 +        form PersonneEditForm()
         ​         ​
-        ​flash(u"​Bonjour %s !" % nom, "​success"​) +        ​# si le formulaire a été soumis et validé 
-        ​return redirect(url_for("​home"​))+        ​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:     else:
-        ​return render_template("​mon_joli_formulaire.html"​)+        ​# l'​objet n'​existe pas 
 +        abort(404)
 </​code>​ </​code>​
 +
 +
  
python/flask/formulaires.1606978505.txt.gz · Dernière modification: 2020/12/03 06:55 (modification externe)