Пользовательские валидаторы в WTForms с использованием Flask - PullRequest
0 голосов
/ 14 мая 2018

Мне нужно создать собственный валидатор в WTForms, где ввод должен быть: число : число - например, 2: 1

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

Итак, мой вопрос - как создать такой валидатор?

Я посмотрел документацию на http://wtforms.readthedocs.io/en/latest/validators.html,, но в этом случае мне не очень помогли.

Заранее спасибо

1 Ответ

0 голосов
/ 14 мая 2018

Вы можете написать собственный валидатор в форме, написав метод validate_{field_name}.Если он поднимает ValidationError, форма будет недействительной и будет отображать ошибку.

Для вашего конкретного случая, вот решение с использованием регулярных выражений.Он находит соответствие для строки, а затем использует немного разделения, чтобы вернуть результаты.После проверки формы вы можете получить доступ к счетам по 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)
...