django-替代为自定义的User model
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了django-替代为自定义的User model,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2175字,纯文字阅读大概需要4分钟。
内容图文
![django-替代为自定义的User model](/upload/InfoBanner/zyjiaocheng/1209/02d79f09e1cb4ae089f825cbccb5a214.jpg)
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
' ref='nofollow'> AbstractBaseUser. AbstractBaseUser' ref='nofollow'> 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
您还应该为您的用户模型定义自定义管理器。如果您的用户模型只定义username
,email
,is_staff
,is_active
,is_superuser
, last_login
,和date_joined
字段,和Django默认的一样,你可以只安装Django的UserManager
class models.
CustomUserManager
create_user()的原型
应该接受用户名字段,加上所有必填字段作为参数。例如,如果您的用户模型用email作为用户名字段
,并且date_of_birth作为
必填字段,create_user
则应定义为:
def create_user(self, email, date_of_birth, password=None): # create user here ...
原文:https://www.cnblogs.com/jabbok/p/11250063.html
内容总结
以上是互联网集市为您收集整理的django-替代为自定义的User model全部内容,希望文章能够帮你解决django-替代为自定义的User model所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。