Frage

Problem:

Ich habe ein Formular in Turbogears 2, die für eine Liste von E-Mail ein Textfeld hat. Gibt es eine einfache Art und Weise ToscaWidgets oder FormEncode zu Kettenform Validierer für Set und E-Mail verwenden oder muss ich meinen eigenen Validator für dieses schreiben?

War es hilfreich?

Lösung

Ich denke, es sollte wie weiter unten noch mehr sein. Es hat den Vorteil, jede E-Mail versucht, anstatt nur auf dem ersten ungültig zu stoppen. Es wird auch die Fehler in den Zustand hinzufügen, damit Sie sagen können, welche davon nicht gelungen war.

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]

Andere Tipps

http://formencode.org/Validator.html

Ein weiterer bemerkenswerter Validator ist formencode.compound.All - das ist eine Verbindung Validator - das heißt, es ist ein Validator, die Validatoren als Eingabe verwendet. Schemen ist ein Beispiel; in diesem Fall braucht nur eine Liste der Validierer und gilt jedes von ihnen wiederum. formencode.compound.Any ist sein Kompliment, dass der ersten Durchgangsprüfer in seiner Liste verwendet.

Was ich wollte, war ein Validator ich nur in ein Feld wie die String-Stick könnte und Int-Validierer. Ich fand es gab keine Möglichkeit, dies zu tun, wenn ich meinen eigenen Validator erstellt. Ich bin hier für Vollständigkeit halber veröffentlichen, und so können andere profitieren.

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

Mit FormEncode Validatoren - Rohr und Wrapper, Sie konnte:

from formencode import validators, compound


compound.Pipe(validators.Wrapper(to_python=lambda v: v.split(',')),
              validators.Email())
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top