加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

django-替代为自定义的User model

发布时间:2020-12-20 12:56:34 所属栏目:Python 来源:网络整理
导读:https://docs.djangoproject.com/en/dev/topics/auth/customizing/#substituting-a-custom-user-model Substituting a custom? User ?model django允许重写默认的user mode,提供了一个setting 值,来指向自定义的model, AUTH_USER_MODEL = ‘users.User‘#

https://docs.djangoproject.com/en/dev/topics/auth/customizing/#substituting-a-custom-user-model

Substituting a custom?User?model

django允许重写默认的user mode,提供了一个setting 值,来指向自定义的model,

AUTH_USER_MODEL = ‘users.User‘
#users是app名
#User是用户model

  

Using a custom user model when starting a project

?如果你开始一个新项目,设定一个自定义的user model是更值得推荐的,即使默认的user model已经满足需求,这个model和默认的user model是一致的,但是可以使你在有需要的时候去自定义它。

from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    pass

  

不要忘记让AUTH_USER_MODEL指向它,记得在创建任何migrations 或者运行migrate?之前做这个事情。

另外,在app的admin.py里注册这个model

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User

admin.site.register(User,UserAdmin)

  

Specifying a custom user model

把所有用户相关的信息放在一个模型中,避免到相关模型中进行复杂的查询。

如果使用默认的认证后端,你的model必须有一个唯一字段,用来标识,可以是一个username,或者email地址,或者其他唯一键。

构建一个兼容的自定义user model最简单的方法是从AbstractBaseUser.AbstractBaseUser?继承,提供了user model 的核心实现。包括哈希散列密码和token化的密码重置。

一些细节上的实现:

class MyUser(AbstractBaseUser):
    identifier = models.CharField(max_length=40,unique=True)
    ...
    USERNAME_FIELD = ‘identifier‘    #描述用户模型上用作唯一标识符的字段名称的字符串。这通常是某种用户名,但也可以是电子邮件地址或任何其他唯一标识符。

  

class MyUser(AbstractBaseUser):
    ...
    date_of_birth = models.DateField()
    height = models.FloatField()
    ...
    REQUIRED_FIELDS = [‘date_of_birth‘,‘height‘]    #通过createsuperuser管理命令创建用户时将提示的字段名称列表。系统将提示用户为每个字段提供值。

  

is_active

一个布尔属性,指示用户是否被视为“活动”。此属性作为AbstractBaseUser默认属性提供True

?

以下属性和方法可用于以下任何AbstractBaseUser的子类

?set_password(raw_password)

把给到的原始密码保存为密码哈希

?

Writing a manager for a custom user model

您还应该为您的用户模型定义自定义管理器。如果您的用户模型只定义usernameemailis_staffis_activeis_superuser,?last_login,和date_joined字段,和Django默认的一样,你可以只安装Django的UserManager;?但是,如果您的用户模型定义了不同的字段,则需要定义一个自定义管理器,拓展BaseUserManager?提供的另外两种方法:

?class?models.CustomUserManager

create_user()的原型应该接受用户名字段,加上所有必填字段作为参数。例如,如果您的用户模型用email作为用户名字段,并且date_of_birth作为必填字段,create_user则应定义为:

?
def create_user(self,email,date_of_birth,password=None):
    # create user here
    ...

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读