web-dev-qa-db-ja.com

Flaskを使用したWTFormsのカスタムバリデーター

入力を行うWTFormsでカスタムバリデーターを作成する必要があります:numbernumber-例2:1

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

だから、私の質問は-そのようなバリデーターをどのように作成するのですか?

http://wtforms.readthedocs.io/en/latest/validators.html でドキュメントを確認しましたが、この場合(私にとって)あまり役に立ちませんでした。

前もって感謝します

validate_{field_name}メソッドを記述することで、フォーム内にカスタムバリデーターを記述できます。 ValidationErrorが発生すると、フォームは無効になり、エラーが表示されます。

あなたの特定のケースのために、これは正規表現を使用したソリューションです。文字列の一致を見つけ、少しの分割を使用してスコアを取得します。フォームを検証した後、form.score1form.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