0

我想从 django-rest-auth 中捕获一个异常。类 rest_auth.serializers.LoginSerializer 抛出各种异常,都是 exceptions.ValidationError

msg = _('Must include "email" and "password".')
        raise exceptions.ValidationError(msg)

 msg = _('Must include "username" and "password".')
        raise exceptions.ValidationError(msg)

raise serializers.ValidationError(_('E-mail is not verified.'))

我只对处理最后一个“电子邮件未验证”感兴趣。但是 try 块将捕获所有 ValidationError 异常。鉴于字符串也已翻译,我如何只处理我感兴趣的那个?这样的支票可以吗还是有更好的方法?

if exc.data is _('E-mail is not verified.')
    # do stuff
    raise exc
4

1 回答 1

1

根据验证错误消息处理异常可能有点反模式,你可能会后悔走这条路。解决此问题的一种方法是检查引发异常的条件 - 在它变成异常之前。

我没有您的应用程序的任何详细信息,但另一种选择是覆盖 rest_auth 序列化程序中的“验证”方法。这将允许您首先检查条件(在 rest_auth 之前)并根据需要处理它。这个项目的好处是它们是开源的,您可以查看源代码以了解它是如何引发此错误的。

class SpecialValidator(LoginSerializer):
   def validate(self, attrs):
       username = attrs.get('username')
       email_address = user.emailaddress_set.get(email=user.email)
       if not email_address.verified:
           # This is where you put in your special handling
       return super(SpecialValidator, self).validate(attrs)
于 2016-03-28T20:47:27.600 回答