簡體   English   中英

Tastypie如何將模型中的錯誤正確地提交回用戶?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM