如何在 django 1.5 中自定义用户模型

Posted

技术标签:

【中文标题】如何在 django 1.5 中自定义用户模型【英文标题】:How to custom user models in django 1.5 【发布时间】:2014-04-05 17:14:26 【问题描述】:

众所周知,django 提供了一个强大的用户和身份验证应用程序。

通常,有两种自定义用户的方法

    使用 OneToOneField 方式。我们可以定义一个模型配置文件来保留一些用户信息字段。我们也可以使用 get_profile 方法来获取配置文件。但是,有一个问题,如果 我们得到用户资料,我们必须加入数据表。一些代码演示:

    from django.db import models
    from django.contrib.auth.models import User
    class Profile(models.Model):
        user = models.OneToOneField(User)
    

    使用 AbstractBaseUser,PermissionsMixin 。我们可以通过更改django--1.5中的AbstractBaseUser、PermissionsMixin来自定义用户,并且必须定义UserAdmin。文档:https://docs.djangoproject.com/en/1.5/topics/auth/customizing/#extending-the-existing-user-model

我很困惑,不知道哪种方式更好?

【问题讨论】:

【参考方案1】:

您需要做的是将AUTH_USER_MODEL 添加到自定义用户类路径的设置中,该类扩展了 AbstractBaseUser(更可定制的版本)或 AbstractUser。

从 django.db 导入模型 从 django.contrib.auth.models 导入( BaseUserManager, AbstractBaseUser ) MyUserManager 类(BaseUserManager): def create_user(self, email, date_of_birth, password=None): """ 使用给定的电子邮件创建并保存用户,日期 出生和密码。 """ 如果不是电子邮件: raise ValueError('用户必须有一个电子邮件地址') 用户 = self.model( email=MyUserManager.normalize_email(email), date_of_birth=date_of_birth, ) user.set_password(密码) user.save(使用=self._db) 返回用户 def create_superuser(self, username, date_of_birth, 密码): """ 使用给定的电子邮件创建并保存超级用户,日期 出生和密码。 """ u = self.create_user(用户名, 密码=密码, date_of_birth=date_of_birth ) u.is_admin = True u.save(使用=self._db) 还你 MyUser 类(AbstractBaseUser): 电子邮件 = 模型。电子邮件字段( verbose_name='电子邮件地址', 最大长度=255 ) date_of_birth = models.DateField() is_active = models.BooleanField(default=True) is_admin = models.BooleanField(default=False) 对象 = MyUserManager() USERNAME_FIELD = '电子邮件' REQUIRED_FIELDS = ['date_of_birth'] def get_full_name(self): # 用户由他们的电子邮件地址识别 返回self.email def get_short_name(self): # 用户由他们的电子邮件地址识别 返回self.email def __unicode__(self): 返回self.email def has_perm(self, perm, obj=None): “用户有特定的权限吗?” # 最简单的答案:是的,总是 返回真 def has_module_perms(self, app_label): “用户是否有权查看应用程序`app_label`?” # 最简单的答案:是的,总是 返回真 @财产 def is_staff(自我): “用户是工作人员吗?” # 最简单的答案:所有管理员都是员工 返回 self.is_admin

【讨论】:

我知道这种方式。我不知道哪种方式更好。【参考方案2】:

自 Django 1.5 以来最好的方法是使用 custom user models,将 AUTH_USER_MODEL 设置为您的用户模型。

【讨论】:

【参考方案3】:

没有理由感到困惑。您链接到的文档是正确的:您应该扩展 AbstractBaseUser。

另外,您应该升级到 1.6 版。

【讨论】:

以上是关于如何在 django 1.5 中自定义用户模型的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 中自定义 slug 字段?

如何根据 django 模板中的不同提交按钮在更新视图中自定义成功 url?

Django 1.5:UserCreationForm 和自定义身份验证模型

如何在 Django 中自定义单选按钮

根据值在 Admin 中自定义 Django 表单字段

无法在 Django 1.5 中使用自定义用户模型创建超级用户