Tastypieを使用して、API 呼び出しを介してユーザーを作成しています(以下の api.py を参照)。ご覧のとおり、すべてのエラーがトリガーexcept IntegrityError
されます。モデルで正しいエラー メッセージがユーザーに返されるようにしたいと考えています。以下のモデル マネージャの例を参照してください。電子メールが空白の場合、「指定された電子メールを設定する必要があります」というエラーが IntegrityError エラーとしてユーザーに返されます。
どうすればいいですか?
api.py
class CreateResource(ModelResource):
"""
API Facet that creates and returns a new user with self.user_email
as login and self.user_password as password.
"""
class Meta:
object_class = CompanyUser
resource_name = 'accounts/create'
fields = ['password1', 'password2', 'email', 'company']
allowed_methods = ['post']
queryset = CompanyUser.objects.all()
serializer = urlencodeSerializer()
def obj_create(self, bundle, request=None, **kwargs):
try:
CompanyUser.objects.create_user(email=bundle.data['email'],
company=bundle.data['company'],
)
except IntegrityError:
raise BadRequest('Username already exists')
モデルマネージャー
class EmailUserManager(BaseUserManager):
def create_user(self, email, password=None, **extra_fields):
"""
Creates and saves an EmailUser with the given email and password.
"""
now = timezone.now()
if not email:
raise ValueError('The given email must be set')
email = EmailUserManager.normalize_email(email)
user = self.model(email=email, is_staff=False, is_active=True,
is_superuser=False, last_login=now,
date_joined=now, **extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
私が見ているように、私のオプションは次のとおりです。
1) api.py で、すべてのパラメーターを 1 つずつ確認します (私のモデルは既にこれを行っているため、これは悪いようです) IntegrityError
。
if bundle.data['email'] = '':
raise BadRequest('no email')
2) マネージャーからのエラーを何らかの方法で api.py ファイルに戻し、動的な IntegrityError を発生させます。