[英]Tastypie how to raise errors from my models correctly back to the user?
我正在使用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中逐個檢查所有參數(這看起來很糟糕,因為我的模型已經這樣做了)然后針對我遇到的每個問題(即電子郵件空白)引發IntegrityError
。
if bundle.data['email'] = '':
raise BadRequest('no email')
2)以某種方式將錯誤從管理器返回到api.py文件並引發動態IntegrityError。
如果你使用TastyPie然后查找驗證 。 然后,您可以使用forms.py方法進行驗證。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.