电子邮件formencode有效时出错

2024-04-25 19:40:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建一个能识别IDN的formencode验证器,在我的一个项目中使用。我使用了Django项目中的一部分代码(http://code.djangoproject.com/svn/django/trunk/django/core/validators.py)但我的代码中一定有一个小错误,我找不到:

class Email(formencode.validators.Email):
    def _to_python(self, value, state):
        try:
            return super(Email, self)._to_python(value, state)
        except formencode.Invalid as e:
            # Trivial case failed. Try for possible IDN domain-part

            print 'heywo !'

            if value and u'@' in value:
                parts = value.split(u'@')
                try:
                    parts[-1] = parts[-1].encode('idna')
                except UnicodeError:
                    raise e

                try:
                    super(Email, self)._to_python(u'@'.join(parts), state)
                except formencode.Invalid as ex:
                    raise ex

                return value
            else:
                raise e

当我试图验证带有IDN域的电子邮件时(例如:测试@w第一个调用引发的无效异常被抛出,第一个except后面的代码部分永远不会执行('heywo!'从不打印)。在

有一个例子:

^{pr2}$

我做错什么了?在

谢谢。在


Tags: to项目django代码selfvalueemailparts
1条回答
网友
1楼 · 发布于 2024-04-25 19:40:35

好吧,找到答案了。我重载了_to_python,而不是{}。该类现在看起来像:

class Email(formencode.validators.Email):
    def validate_python(self, value, state):
        try:
            super(Email, self).validate_python(value, state)
        except formencode.Invalid as e:
            # Trivial case failed. Try for possible IDN domain-part
            if value and u'@' in value:
                parts = value.split(u'@')
                try:
                    parts[-1] = parts[-1].encode('idna')
                except UnicodeError:
                    raise e

                try:
                    super(Email, self).validate_python(u'@'.join(parts), state)
                except formencode.Invalid as ex:
                    raise ex
            else:
                raise e

它工作得很好:)

相关问题 更多 >