Outils pour utilisateurs

Outils du site


Panneau latéral

Plan du Site:

python:flask:flask_wtf

Ceci est une ancienne révision du document !


Flask-WTF

Installation

pip install flask-wtf

Création du formulaire

forms.py
from flask_wtf import FlaskForm
from wtforms   import StringField
 
class RegisterForm(FlaskForm):
    name     = StringField('Nom', validators=[])
    password = PasswordField('Mot de passe', validators=[])
    submit   = SubmitField("S'inscrire")

Utilisation du formulaire

app.py
from flask import Flask, render_template, redirect, url_for
from forms import RegisterForm;
 
app = Flask(__name__)
 
@app.route('/register', methods=['get', 'post'])
def register():
    form = RegisterForm()
 
    if form.validate_on_submit():
        print('Nom: ' + form.email.data)
        print('Mot de passe: ' + form.password.data)
 
        # Insert dans la DB
 
        # Flash message
 
        return redirect(url_for('index'))
 
    return render_template('register.html, form=form)

Intégration dans le template :

register.html
<form action="" method="post">
    {{ form.hidden_tag() }}
    <div class="form-group">
        {{ form.name.label(class="form-label") }}
        {{ form.name(class="form-input") }}
    </div>
    <div class="form-group">
        {{ form.password.label(class="form-label") }}
        {{ form.password(class="form-input") }}
    </div>
    {{ form.submit(class="btn btn-primary") }}
</form>

Ajout de contraintes de validation

forms.py
from flask_wtf          import FlaskForm
from wtforms            import StringField
from wtforms.validators import DataRequired, Email, Length, ValidationError
 
class RegisterForm(FlaskForm):
    email    = StringField('Nom', validators=[DataRequired(), Email()])
    password = PasswordField('Mot de passe', validators=[DataRequired(), Length(min=4, max=12)])
    submit   = SubmitField("S'inscrire")
 
    # validation custom
    def validate_email(self, email):
        if email.data == "root@domain.com":
            raise ValidationError("Cet email est déjà enregistré")

Intégrer les messages de chaque champ dans le template :

register.html
<div class="form-group">
  {{ form.email.label(class="form-label") }}
  {{ form.email(class="form-input" }}
  {% for error in form.email.errors %}
    {{ error }}
  {% endfor %}
</div>
 
<div class="form-group">
  {{ form.password.label(class="form-label") }}
  {{ form.password(class="form-input" }}
  {% for error in form.password.errors %}
    {{ error }}
  {% endfor %}
</div>
python/flask/flask_wtf.1666331345.txt.gz · Dernière modification: 2022/10/21 05:49 par marclebrun