0

問題:

TurboGears 2に、電子メールのリスト用のテキストフィールドがあるフォームがあります。ToscaWidgetsまたはFormEncodeを使用してSetとEmailのフォームバリデーターをチェーンする簡単な方法はありますか、それともこれのために独自のバリデーターを作成する必要がありますか?

4

4 に答える 4

1

http://formencode.org/Validator.htmlから

もう1つの注目すべきバリデーターはformencode.compound.Allです。これは複合バリデーターです。つまり、バリデーターを入力として受け取るバリデーターです。スキーマはその一例です。この場合、Allはバリデーターのリストを取得し、それぞれを順番に適用します。formencode.compound.Anyはその褒め言葉であり、リストの最初に渡されたバリデーターを使用します。

于 2010-10-18T19:57:32.377 に答える
0

私が欲しかったのは、StringやIntバリデーターのようなフィールドに固執できるバリデーターでした。独自のバリデーターを作成しない限り、これを行う方法はありませんでした。完全を期すためにここに投稿しているので、他の人が恩恵を受けることができます。

from formencode import FancyValidator, Invalid
from formencode.validators import Email

class EmailList(FancyValidator):
    """ Takes a delimited (default is comma) string and returns a list of validated e-mails
        Set the delimiter by passing delimiter="A_DELIMITER" to the constructor.
        Also takes all arguments a FancyValidator does.  
        The e-mails will always be stripped of whitespace.
    """
    def _to_python(self, value, state):
        try:
            values = str(value).split(self.delimiter)
        except AttributeError:
            values = str(value).split(',')
        returnValues = []
        emailValidator = Email()
        for value in values:
            returnValues.append( emailValidator._to_python(value.strip(), state) )
        return values
于 2009-07-15T19:12:58.117 に答える
0

以下のようにすべきだと思います。最初の無効なメールで停止するのではなく、各メールを試すという利点があります。また、状態にエラーが追加されるため、どのエラーが失敗したかを知ることができます。

from formencode import FancyValidator, Invalid
from formencode.validators import Email

class EmailList(FancyValidator):
    """ Takes a delimited (default is comma) string and returns a list of validated e-mails
        Set the delimiter by passing delimiter="A_DELIMITER" to the constructor.
        Also takes all arguments a FancyValidator does.  
        The e-mails will always be stripped of whitespace.
    """
    def _to_python(self, value, state):
        try:
            values = str(value).split(self.delimiter)
        except AttributeError:
            values = str(value).split(',')
        validator = formencode.ForEach(validators.Email())
        validator.to_python(values, state)
        return [value.strip() for value in values]
于 2009-07-15T23:00:11.387 に答える
0

FormEncodeバリデーター(パイプとラッパー)を使用すると、次のことができます。

from formencode import validators, compound


compound.Pipe(validators.Wrapper(to_python=lambda v: v.split(',')),
              validators.Email())
于 2016-11-21T13:51:15.623 に答える