为Custom Manager Django创建用户方法

时间:2015-02-03 05:50:11

标签: django django-models

我正在关注本教程(http://musings.tinbrain.net/blog/2014/sep/21/registration-django-easy-way/) 在Django中创建用户注册模型。

据我所知,UserManager类正在覆盖默认的User模型。但是,我不明白这个特殊的部分。

官方的Django文档并没有解释这意味着什么 - 它只显示了完整的代码。

https://docs.djangoproject.com/en/1.7/topics/auth/customizing/

需要澄清一下这里发生了什么。

user = self.model(email=self.normalize_email(email), is_active=True, **kwargs)
user.set_password(password)
user.save(using=self._db)

这是整个班级。

class UserManager(BaseUserManager):

    def create_user(self, email, password, **kwargs):
        user = self.model(email=self.normalize_email(email), is_active=True, **kwargs)
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, email, password, **kwargs):
        user = self.model(email=email, is_staff=True, is_superuser=True, is_active=True, **kwargs)
        user.set_password(password)
        user.save(using=self._db)
        return user

1 个答案:

答案 0 :(得分:1)

在内存中创建用户实例。填充self.model属性然后在模型类中实例化模型管理器:

class MyUser(AbstractBaseUser):
    objects = UserManager() # here the `objects.model` is set to `MyUser`

规范化电子邮件意味着域部分是低级的。 is_activeTrue,因此用户可以登录。如果将任何其他字段作为keyword arguments传递给create_user(),则将这些字段分配给创建的用户。

user = self.model(email=self.normalize_email(email), is_active=True, **kwargs)

设置哈希密码。

user.set_password(password)

将用户实例保存到数据库中。

user.save(using=self._db)