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

Validation Error メッセージに基づいて例外を処理するのは少しアンチパターンかもしれません。これを回避する 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 に答える