Skip to main content
 首页 » 编程设计

python之为什么在 django.contrib.auth.models.UserManager 中同时存在 create_user 和 _create_user 方法

2024年09月07日46mq0036

在source for django ,有一个 UserManager 类,其工作(据我所知)是根据接收到的一些参数创建用户并将它们保存到数据库中。该类使用两种方法完成此操作。一种方法create_user和一种方法_create_user,后者由前者调用。我的问题是,为什么需要两种方法?为什么不简单地拥有一个做完全相同的事情呢?像这样:

def create_user(self, username, email=None, password=None, 
                 **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=False, is_active=True, 
                      is_superuser=False, 
                      date_joined=now, **extra_fields) 
    user.set_password(password) 
    user.save(using=self._db) 
    return user 

请您参考如下方法:

我想我自己找到了答案。该类还有一个 create_superuser 方法,该方法也调用 _create_user,但参数不同。因此,_create_user 的使用使我们不必将相同的功能编写两次。