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

Python 如何在django 1.5中自定义用户模型,python,django,Python,Django,众所周知,django提供了一个强大的用户和身份验证应用程序 通常,有两种方法可以自定义用户 使用OneToOneField方式。我们可以定义一个模型配置文件,其中保存一些用户信息字段。我们还可以使用get_profile方法来获取概要文件。但是,有一个问题,如果 如果我们得到用户配置文件,我们必须加入数据表。一些代码演示: from django.db import models from django.contrib.auth.models import User class Profile

众所周知,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。文档:


  • 我很困惑,不知道哪条路更好

    由于Django 1.5,现在最好的方法是将设置为您的用户模型。

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


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

    您需要做的是将
    AUTH\u USER\u MODEL
    添加到设置中,其中包含自定义用户类的路径,该类扩展了AbstractBaseUser(更可自定义的版本)或AbstractUser

    from django.db import models from django.contrib.auth.models import ( BaseUserManager, AbstractBaseUser ) class MyUserManager(BaseUserManager): def create_user(self, email, date_of_birth, password=None): """ Creates and saves a User with the given email, date of birth and password. """ if not email: raise ValueError('Users must have an email address') user = self.model( email=MyUserManager.normalize_email(email), date_of_birth=date_of_birth, ) user.set_password(password) user.save(using=self._db) return user def create_superuser(self, username, date_of_birth, password): """ Creates and saves a superuser with the given email, date of birth and password. """ u = self.create_user(username, password=password, date_of_birth=date_of_birth ) u.is_admin = True u.save(using=self._db) return u class MyUser(AbstractBaseUser): email = models.EmailField( verbose_name='email address', max_length=255 ) date_of_birth = models.DateField() is_active = models.BooleanField(default=True) is_admin = models.BooleanField(default=False) objects = MyUserManager() USERNAME_FIELD = 'email' REQUIRED_FIELDS = ['date_of_birth'] def get_full_name(self): # The user is identified by their email address return self.email def get_short_name(self): # The user is identified by their email address return self.email def __unicode__(self): return self.email def has_perm(self, perm, obj=None): "Does the user have a specific permission?" # Simplest possible answer: Yes, always return True def has_module_perms(self, app_label): "Does the user have permissions to view the app `app_label`?" # Simplest possible answer: Yes, always return True @property def is_staff(self): "Is the user a member of staff?" # Simplest possible answer: All admins are staff return self.is_admin 从django.db导入模型 从django.contrib.auth.models导入( BaseUserManager,AbstractBaseUser ) 类MyUserManager(BaseUserManager): def create_user(自我、电子邮件、出生日期、密码=无): """ 使用给定的电子邮件创建并保存用户,日期为 出生和密码。 """ 如果不是电子邮件: raise VALUERROR('用户必须有电子邮件地址') user=self.model( 电子邮件=MyUserManager。规范化电子邮件(电子邮件), 出生日期=出生日期, ) user.set_密码(password) user.save(使用=self.\u db) 返回用户 def create_superuser(自我、用户名、出生日期、密码): """ 使用给定的电子邮件创建并保存超级用户,日期为 出生和密码。 """ u=自创建用户(用户名, 密码=密码, 出生日期=出生日期 ) u、 _admin=True吗 u、 保存(使用=self.\u db) 返回u 类MyUser(AbstractBaseUser): email=models.EmailField( 详细的名称=“电子邮件地址”, 最大长度=255 ) 出生日期=models.DateField() is_active=models.BooleanField(默认值=True) is_admin=models.BooleanField(默认值=False) objects=MyUserManager() 用户名\字段='电子邮件' 必填字段=[“出生日期”] def get_全名(自我): #用户通过其电子邮件地址进行标识 返回self.email def get_short_名称(自我): #用户通过其电子邮件地址进行标识 返回self.email def ___; unicode(自): 返回self.email def具有_perm(自我、perm、obj=无): “用户是否具有特定权限?” #最简单的答案是:是的,总是这样 返回真值 def具有模块(自身、应用程序标签): “用户是否有权限查看应用程序`app\u label`?” #最简单的答案是:是的,总是这样 返回真值 @财产 def是_员工(自我): “用户是否是员工?” #最简单的答案是:所有的管理员都是职员 返回self.is_admin
    我知道这条路。我不知道哪条路更好