如何在django-rest框架中获得正确的验证异常?

时间:2016-03-27 21:30:10

标签: django django-rest-framework django-rest-auth

我想从django-rest-auth中捕获一个异常。类rest_auth.serializers.LoginSerializer抛出各种异常,所有异常.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

1 个答案:

答案 0 :(得分:1)

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

我没有您的应用的任何详细信息,但另一种选择是覆盖rest_auth序列化器中的'validate'方法。这将允许您首先检查条件(在rest_auth之前)并根据需要进行处理。这个项目的好处是它们是开源的,你可以view the source看看它是如何引发这个错误的。

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)