2

我正在尝试完成 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() 有什么区别?

4

1 回答 1

3

下面是 _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 函数。方法开头的下划线表示该函数仅供内部使用。覆盖内部方法很好,但根据我的观点,最好在设计上覆盖公共方法。

于 2013-11-16T05:09:03.580 回答