Outils pour utilisateurs

Outils du site


python:flask:flask_wtf

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:flask_wtf [2022/12/10 08:44]
marclebrun [Création du formulaire]
python:flask:flask_wtf [2023/01/08 08:13] (Version actuelle)
marclebrun [Validation]
Ligne 31: Ligne 31:
 ^ EmailField ​   |                             || ^ EmailField ​   |                             ||
 ^ PasswordField |                             || ^ PasswordField |                             ||
 +^ TextAreaField |                             ||
 ^ FloatField ​   | (préférer **DecimalField**) || ^ FloatField ​   | (préférer **DecimalField**) ||
 ^ DateField ​    | Date avec calendrier ​       || ^ DateField ​    | Date avec calendrier ​       ||
Ligne 36: Ligne 37:
 ^ DecimalField ​ | Champ numérique décimal ​    | ''​places=X''​ | ^ DecimalField ​ | Champ numérique décimal ​    | ''​places=X''​ |
 ^ BooleanField ​ |                             || ^ BooleanField ​ |                             ||
 +^ SelectField ​  | Liste dropdown ​             | ''​choices=[ ('​valeur',​ '​texte'​),​ ('​valeur2',​ '​texte2'​) ]''​ |
 ^ SubmitField ​  ​| ​                            || ^ SubmitField ​  ​| ​                            ||
  
Ligne 90: Ligne 92:
 </​code>​ </​code>​
  
-===== Ajout de contraintes de validation ​=====+===== Ajout d'ID aux champs ​===== 
 + 
 +Par défaut c'est le nom du champ, mais si on désire imposer un **id** 
 +on peut le passer au constructeur des champs : 
 + 
 +<code python forms.py>​ 
 +class MyForm(FlaskForm):​ 
 +    nom  = StringField("​Nom",​ id="​edtNom"​) 
 +    sexe = SelectField("​Sexe",​ id="​cmbSexe"​) 
 +</​code>​ 
 + 
 +===== Validation ===== 
 + 
 +Ajout de contraintes de validation aux champs :
  
 <code python forms.py>​ <code python forms.py>​
Ligne 109: Ligne 124:
 </​code>​ </​code>​
  
-Intégrer ​les messages de chaque champ dans le template ​:+Désactiver la validation par défaut du navigateur (ajouter **novalidate**) : 
 + 
 +<code html> 
 +<form action=""​ method="​post"​ novalidate>​ 
 + 
 +    ... 
 +     
 +</​form>​ 
 +</​code>​ 
 + 
 +Afficher ​les messages ​d'​erreur ​de chaque champ :
  
 <code html register.html>​ <code html register.html>​
Ligne 177: Ligne 202:
         ...         ...
 </​code>​ </​code>​
 +
 +===== Remplir un SelectField =====
 +
 +Source: [[https://​stackoverflow.com/​questions/​63209897/​flask-wtforms-building-a-selectfield-from-a-table]]
 +
 +**EXEMPLE À TESTER :**
 +
 +<code python>
 +from flask_wtf ​ import FlaskForm
 +from wtforms ​   import SelectField
 +from app.models import Categories
 +
 +class MyForm(FlaskForm):​
 +    # ...
 +    category = SelectField("​Catégorie"​)
 +    ​
 +    def __init__(self,​ **kwargs):
 +        super().__init__(**kwargs)
 +        self.category.choices = Categories.query.all()
 +</​code>​
 +
 +**Remplissage via Javascript => désactiver la validation**
 +
 +Si la liste de choix est remplie via Javascript une fois le formulaire déjà créé,
 +la validation échouera car la valeur sélectionnée ne fera jamais partie des choix
 +possibles. Pour résoudre ce problème, il faut désactiver la validation pour ce
 +champ :
 +
 +<code python>
 +class MyForm(FlaskForm):​
 +    # ...
 +    category = SelectField("​Catégorie",​ validate_choice=False)
 +</​code>​
 +
  
python/flask/flask_wtf.1670661880.txt.gz · Dernière modification: 2022/12/10 08:44 par marclebrun