Python 如何在django 1.5中自定义用户模型
众所周知,django提供了一个强大的用户和身份验证应用程序 通常,有两种方法可以自定义用户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
from django.db import models
from django.contrib.auth.models import User
class Profile(models.Model):
user = models.OneToOneField(User)
我很困惑,不知道哪条路更好 由于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
我知道这条路。我不知道哪条路更好