Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
python:flask:formulaires [2023/11/01 16:12] marclebrun |
python:flask:formulaires [2023/11/10 07:16] (Version actuelle) marclebrun [Traitement] |
||
---|---|---|---|
Ligne 19: | Ligne 19: | ||
actif = BooleanField(u"Actif") | actif = BooleanField(u"Actif") | ||
submit = SubmitField(u"Enregistrer") | submit = SubmitField(u"Enregistrer") | ||
- | cancel = SubmitField(u"Annuler") | ||
</code> | </code> | ||
Ligne 29: | Ligne 28: | ||
<form action="" method="post"> | <form action="" method="post"> | ||
{{ form.hidden_tag() }} | {{ form.hidden_tag() }} | ||
+ | | ||
<div class="form-group"> | <div class="form-group"> | ||
{{ form.nom.label(class="form-label") }} | {{ form.nom.label(class="form-label") }} | ||
{{ form.nom(class="form-input") }} | {{ form.nom(class="form-input") }} | ||
</div> | </div> | ||
+ | | ||
<div class="form-group"> | <div class="form-group"> | ||
{{ form.prenom.label(class="form-label") }} | {{ form.prenom.label(class="form-label") }} | ||
{{ form.prenom(class="form-input") }} | {{ form.prenom(class="form-input") }} | ||
</div> | </div> | ||
+ | | ||
<div class="form-group"> | <div class="form-group"> | ||
{{ form.genre.label(class="form-label") }} | {{ form.genre.label(class="form-label") }} | ||
- | {{ form.genre(class="form-input") }} | + | {{ 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> | </div> | ||
- | {{ form.submit(class="btn btn-primary") }} | ||
- | {{ form.cancel(class="btn btn-secondary") }} | ||
</form> | </form> | ||
</code> | </code> | ||
Ligne 69: | Ligne 74: | ||
form = PersonneEditForm() | form = PersonneEditForm() | ||
| | ||
- | # si le formulaire a été soumis | + | # si le formulaire a été soumis et validé |
- | if form.is_submitted(): | + | if form.validate_on_submit(): |
| | ||
- | # si on a validé avec le bouton "Annuler" | + | # enregistrer l'objet |
- | if form.cancel.data: | + | personne.nom = form.nom.data |
- | return redirect(url_for('personnes.index')) | + | personne.prenom = form.prenom.data |
- | + | personne.genre = form.genre.data | |
- | # si on a validé avec le bouton "Enregistrer" | + | if id == 0: |
- | if form.submit.data: | + | # si 0 on est dans l'ajout d'un nouvel objet |
- | # si tous les champs du formulaire sont valides | + | db.session.add(personne) |
- | if form.validate(): | + | # valider l'enregistrement dans la db |
- | # enregistrer l'objet | + | db.session.commit() |
- | 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 | + | # rediriger vers l'index |
- | return redirect(url_for('personnes.index')) | + | return redirect(url_for('personnes.index')) |
| | ||
# sinon il faut le remplir et l'afficher | # sinon il faut le remplir et l'afficher | ||
Ligne 104: | Ligne 101: | ||
</code> | </code> | ||
- | ---- | ||
- | Le formulaire en lui-même peut être écrit directement dans | ||
- | un template : | ||
- | |||
- | <code html mon_joli_formulaire.html> | ||
- | <h1>Formulaire</h1> | ||
- | |||
- | <form method="POST"> | ||
- | <div class="form-group"> | ||
- | <label for="name">Nom</label> | ||
- | <input type="text" class="form-control" id="name" name="name"/> | ||
- | </div> | ||
- | | ||
- | ... | ||
- | | ||
- | <button type="submit" class="btn btn-primary">Enregistrer</button> | ||
- | </form> | ||
- | </code> | ||
- | |||
- | Ensuite dans une vue on récupère les infos selon que le formulaire | ||
- | a été posté (méthode POST) ou pas (méthode GET) : | ||
- | |||
- | <code python> | ||
- | from flask import render_template, request, redirect, url_for | ||
- | |||
- | @app.route("/formulaire", methods=["GET", "POST"]) | ||
- | def test_formulaire(): | ||
- | if request.method == 'POST': | ||
- | | ||
- | nom = request.form['name'] | ||
- | | ||
- | flash(u"Bonjour %s !" % nom, "success") | ||
- | return redirect(url_for("home")) | ||
- | | ||
- | else: | ||
- | return render_template("mon_joli_formulaire.html") | ||
- | </code> | ||
- | |||
- | ===== Lister les valeurs du formulaire ===== | ||
- | |||
- | Pour debug, afficher toutes les valeurs transmises par le formulaire : | ||
- | |||
- | <code python> | ||
- | from flask import request | ||
- | |||
- | @app.route("/formulaire", methods=["GET", "POST"]) | ||
- | def test_formulaire(): | ||
- | |||
- | if request.method == 'POST': | ||
- | | ||
- | for field, value in request.form.items(): | ||
- | print(field, value) | ||
- | |||
- | ... | ||
- | </code> | ||