web-dev-qa-db-fra.com

Validateurs personnalisés dans WTForms utilisant Flask

J'ai besoin de faire un validateur personnalisé dans WTForms où l'entrée doit être: nombre : nombre - par exemple 2: 1

match1 = StringField('Russia-Saudi Arabia', validators=[DataRequired()])

Donc, ma question est - comment créer un tel validateur?

J'ai regardé la documentation à http://wtforms.readthedocs.io/en/latest/validators.html , mais ce n'était pas très utile (pour moi) dans ce cas.

Merci d'avance

Vous pouvez écrire un validateur personnalisé dans un formulaire en écrivant un validate_{field_name} méthode. S'il déclenche un ValidationError, le formulaire ne sera pas valide et affichera l'erreur.

Pour votre cas spécifique, voici une solution utilisant regex. Il trouve la correspondance pour la chaîne, puis utilise un peu de fractionnement pour récupérer les scores. Après avoir validé le formulaire, vous pouvez accéder aux scores par form.score1, form.score2.

import re
from flask_wtf import FlaskForm

class MatchForm(FlaskForm):
    match1 = StringField("Russia-Saudi Arabia", validators=[DataRequired()])

    def validate_match1(form, field):
        if not re.search(r"^[0-9]+:[0-9]+$", field.data):
            raise ValidationError("Invalid input syntax")

        s1, s2 = form.data.split(":")
        form.score1 = int(s1)
        form.score2 = int(s2)
10
Joost