我正在尝试完成 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() 有什么区别?
我正在尝试完成 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() 有什么区别?
下面是 _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 函数。方法开头的下划线表示该函数仅供内部使用。覆盖内部方法很好,但根据我的观点,最好在设计上覆盖公共方法。