我想从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
答案 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)