2016-03-27 15 views
0

Django-rest-auth'dan bir istisna yakalamak istiyorum. sınıf rest_auth.serializers.LoginSerializer Sonuncusunu işlenmesi ilgilenen değilim, bütün exceptions.ValidationErrorDjango-rest çerçevesinde doğru Doğrulama özel durumu nasıl alınır?

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.')) 

çeşitli istisnalar atar 'e-posta doğrulanmadı.' ancak bir try bloğu tüm ValidationError istisnalarını yakalayacaktır. Sadece dizgenin de çevrildiğini düşünürken beni ilgilendiren şeyi nasıl ele alabilirim? Böyle bir kontrol olur mu yoksa daha iyi bir yol var mı? Doğrulama Hata iletiye göre

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

cevap

1

Taşıma istisnalar bir anti-desen biraz olabilir ve o yolda ilerliyorum pişman olabilir. Bunun bir istisnası istisnai duruma gelmeden önce - istisnaları yükselten koşulları kontrol etmektir.

Uygulamanızın herhangi bir detayı yok, ancak başka bir seçenek de rest_auth serializer'daki 'validate' yöntemini geçersiz kılacak. Bu, ilk önce durumu (rest_auth'dan önce) kontrol etmenizi ve istediğiniz şekilde ele almanızı sağlar. Bu projeler hakkında güzel olan şey, açık kaynak kodlarıdır ve bu hatayı nasıl artırdığını görmek için 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) 
+0

Cevabınız için teşekkür ederiz. LoginSerializer sınıfını sınıflandırma ve validate yöntemini geçersiz kılmayı düşünmüştüm. Benim asıl kaygımın, validate yönteminin benim geçersiz kılmamı kopyalamak zorunda olduğum birçok kod satırına sahip olmasıydı ve bunu yaparak, daha sonra yapılacak iyileştirmelerden faydalanmayacak bir çatal yaratacağım. Ancak öneriniz daha basit görünüyor. – voger

İlgili konular