首页 > 解决方案 > 为重复实例 Django 引发什么异常

问题描述

我有一个util名为 的方法add_user,它接收电子邮件和密码并创建一个用户。首先,它检查该用户是否已经存在:

if User.objects.filter(email=email).exists():
    # raise some exception

我应该在这里提出什么样的例外?谢谢!!

标签: django

解决方案


如果问题是关于引发异常然后使用ObjectDoesNotExist from django.core.exceptions,我认为您应该为用户模型创建自定义对象管理器并使用自定义异常继承ObjectDoesNotExist。例如,

class EmailAlreadyExists(ObjectDoesNotExist):
       pass

或者另一种方法是创建类方法:

class User(AbstractUser):

 @classmethod
 def create_user(cls, email):
    if objects.filter(email=email).exists():
        raise EmailAlreadyExists()

如果我们需要将一些参数传递给上面的代码可能无法工作,例如我没有或忘记了,EmailAlreadyExists因为它是从ObjectDoesNotExist.

最好的方法是创建自定义对象管理器User并验证那里的所有内容。默认情况下,Django 已经为用户处理了电子邮件字段。


推荐阅读