django-扩展'auth.models.User'和用户登录、注销
如果我创建一个django-扩展'auth.models.User'和用户登录、注销,django,django-authentication,Django,Django Authentication,如果我创建一个CustomUser模型,该模型继承自django.contrib.auth.models.User,如下所示: 在models.py中 class CustomUser(django.contrib.auth.models.User): customfield = TextField() ... 我还能用吗 django.contrib.auth.{authenticate,login,logout}以正常方式?我需要做一些额外的配置更改吗?我知道这些方法只适用
CustomUser
模型,该模型继承自django.contrib.auth.models.User
,如下所示:
在models.py中
class CustomUser(django.contrib.auth.models.User):
customfield = TextField()
...
我还能用吗
django.contrib.auth.{authenticate,login,logout}
以正常方式?我需要做一些额外的配置更改吗?我知道这些方法只适用于User
对象,但从技术上讲,我的CustomUser
is-aUser
目前,authenticate(username=u,password=p)
总是返回None
,即使是使用有效的凭据。简要概述:
-扩展模型。AbstractUser
-在settings.py中设置AUTH_USER_模型
所有的细节都可以在这里找到:自从Django 1.5(官方的,但对我来说不起作用)和1.6中的“稳定”以来,有一个功能可以以干净的方式扩展用户模型
首先:
->请注意,您只能通过以下方式加载用户模型:
from django.contrib.auth import get_user_model
User = get_user_model()
->一旦建立了数据库,就没有简单的方法来更改用户模型。数据库关系将中断,Django/South无法修复
->第三方模块必须与新布局兼容,并在其模型中引用“get_user_model()”
您必须为管理员添加一些代码以尊重您的新型号:
见:
要覆盖模型,您需要从AbstractBaseUser
继承:
from django.contrib.auth.models import AbstractBaseUser
class MyUser(AbstractBaseUser):
...
date_of_birth = models.DateField()
height = models.FloatField()
...
REQUIRED_FIELDS = ['date_of_birth', 'height']
AbstractBaseUser为您提供默认用户模型的所有属性。所以你不必关心电子邮件、用户名、名字、姓氏、密码等。
有关覆盖用户模型的详细信息:
在“设置”中,链接新模型:
AUTH_USER_MODEL = 'customauth.MyUser'
请阅读全文,这里有一些关于覆盖默认管理器、管理表单等的有趣提示。请记住,对现有项目进行更大的更改可能会带来很大的麻烦。您使用的是哪个版本的django?@Marcdjango==1.6.2
,感谢您的帮助MyUser是否可以与内置组一起使用,或者是否也必须对其进行修改。(即AUTH_USER_模型定义是否足以将其绑定在一起)?是的,只需在您的模型中传递PermissionsMixin(在django.contrib.AUTH.models中找到),此mixin将处理模型关系和方法