在Django自定义用户管理器中,create_user和_create_user()之间的区别是什么?

时间:2013-11-16 03:05:49

标签: python django django-models django-users django-managers

我正在尝试使用Django自定义用户管理器的教程。他们中的大多数都会像文档中所说的那样覆盖create_user()和create_super_user(),但本教程将单独保留这两种方法,而是覆盖_create_user()

http://www.caktusgroup.com/blog/2013/08/07/migrating-custom-user-model-django/

这是对的吗?重写_create_user()和create_user()有什么区别?

1 个答案:

答案 0 :(得分:1)

以下是_create_user,create_super_user和create_user方法的代码。

def _create_user(self, username, email, password,
                 is_staff, is_superuser, **extra_fields):
    """
    Creates and saves a User with the given username, email and password.
    """
    now = timezone.now()
    if not username:
        raise ValueError('The given username must be set')
    email = self.normalize_email(email)
    user = self.model(username=username, email=email,
                      is_staff=is_staff, is_active=True,
                      is_superuser=is_superuser, last_login=now,
                      date_joined=now, **extra_fields)
    user.set_password(password)
    user.save(using=self._db)
    return user

def create_user(self, username, email=None, password=None, **extra_fields):
    return self._create_user(username, email, password, False, False,
                             **extra_fields)

def create_superuser(self, username, email, password, **extra_fields):
    return self._create_user(username, email, password, True, True,
                             **extra_fields)

正如您所看到的,create_user和create_super_user方法正在调用_create_user函数。方法开头的下划线表示该函数仅供内部使用。可以覆盖内部方法,但根据我的观点,设计更好地覆盖公共方法。