سؤال

مشكلة:

لدي نموذج في TurboGears 2 الذي يحتوي على حقل نصي للحصول على قائمة رسائل البريد الإلكتروني. هل هناك طريقة بسيطة باستخدام TOCCAWIDGETS أو FormEncode إلى سلسلة من الموصلات الخاصة بالسلسلة للمجموعة والبريد الإلكتروني أو هل يجب علي كتابة خادمي الخاص لهذا؟

هل كانت مفيدة؟

المحلول

أعتقد أنه ينبغي أن يكون أشبه أدناه. لديها ميزة محاولة كل بريد إلكتروني بدلا من التوقف فقط في الأول غير صالح. سيقوم أيضا بإضافة الأخطاء إلى الدولة حتى تتمكن من معرفة أي منها فشلت.

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]

نصائح أخرى

من http://formencode.org/validator.html.

Volidator.pound.All - كل ذلك - هذا هو التحقق من Validators مؤكدا، فهذا هو التحقق من الموصلين مخططات هي مثال واحد؛ في هذه الحالة، يأخذ جميعها قائمة من الموصلات وتطبق كل منها بدوره. FormEncode.CePound.any هو مجاملاته، يستخدم أول قراءة تمرير في قائمته.

ما أردت هو المصدق الذي يمكنني التمسك به فقط في حقل مثل الخيط والمصادف 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

مع Visptencode Professators. - الأنابيب والمغلقة، يمكنك:

from formencode import validators, compound


compound.Pipe(validators.Wrapper(to_python=lambda v: v.split(',')),
              validators.Email())
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top