django-替代为自定义的User model
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
您还应该为您的用户模型定义自定义管理器。如果您的用户模型只定义username,email,is_staff,is_active,is_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
...
django-替代为自定义的User model的更多相关文章
- django之自定义软删除Model
软删除 简单的说,就是当执行删除操作的时候,不正真执行删除操作,而是在逻辑上删除一条记录.这样做的好处是可以统计数据,可以进行恢复操作等等. 预备知识 Managers Managers 是djang ...
- Django中的自定义过滤器
一.为什么要自定义Django中的自定义过滤器:Django中提供了很多内置的过滤器和标签,详见链接django官网,主要有以下几个: autoescape(自动转义)block(模板继承)csrf_ ...
- Django 反向生成 从数据库生成Model
Django 反向生成 从数据库生成Model 使用Django生成Model python manage.py inspectdb或python manage.py inspectdb > m ...
- Django关于设置自定义404和安装debug-toolbar的笔记
Django关于设置自定义404和安装debug-toolbar的笔记 关于设置404 先做好404页面,然后在views.py文件中做好映射,最后是在urls.py做好路由,而这个urls.py必须 ...
- 第三百一十四节,Django框架,自定义分页
第三百一十四节,Django框架,自定义分页 自定义分页模块 #!/usr/bin/env python #coding:utf-8 from django.utils.safestring impo ...
- Django(模板语言-自定义filter和simple_tag)
Django(模板语言-自定义filter和simple_tag) filter过滤器的主要形式:变量|函数,意思是将变量交给函数处理,而自定义filter就是自己定义函数,因为用到已有的很少. ...
- 3- vue django restful framework 打造生鲜超市 - model设计和资源导入
3- vue django restful framework 打造生鲜超市 - model设计和资源导入 使用Python3.6与Django2.0.2(Django-rest-framework) ...
- 如何让django模型中的字段和model名显示为中文
如何让django模型中的字段和model名显示为中文:在模型中加入class Meta即可 class People(models.Model): name = models.CharField(n ...
- tensorflow 2.0 技巧 | 自定义tf.keras.Model的坑
自定义tf.keras.Model需要注意的点 model.save() subclass Model 是不能直接save的,save成.h5,但是能够save_weights,或者save_form ...
随机推荐
- 动态代理,AOP和Spring
笔记 1. 什么是AOP? Aspect-Oriented Programming 面向切面编程,关注一个统一的切面,相对于OOP(面向对象编程). 适合的场景: 日志 缓存 鉴权 如果用OOP来做怎 ...
- MySQL学习之SQL基础(一)DML
DML(data Manipulation language) INSERT DELETE UPDATE SELECT INSERT mysql> desc emp; +----------+- ...
- CSS - flex使行内元素快速对齐
div{ display:flex; alian-items:center; //使垂直对齐 justify-content:center //使水平对齐 }
- RAM和ROM的区别
区别如下: 1.概念 RAM(random access memory)即随机存储内存,这种存储器在断电时将丢失其存储内容,故主要用于存储短时间使用的程序.ROM(Read-Only Memory)即 ...
- 016.CI4框架CodeIgniter数据库操作之:Insert插入一条数据
01.在Model中,写入插入的语句 <?php namespace App\Models\System; use CodeIgniter\Model; class User_model ext ...
- HDU - 3729 I'm Telling the Truth(二分匹配)
题意:有n个人,每个人给出自己的名次区间,问最多有多少个人没撒谎,如果有多解,输出字典序最大的解. 分析: 1.因为字典序最大,所以从后往前分析. 2.假设后面的人没说谎,并将此作为已知条件,然后从后 ...
- 聊一聊Java中的各种运算符(转载)
计算机之所以叫"计算机",其最基本用途之一就是运算,对应刚刚接触Java的小伙伴而言,熟悉并掌握Java中的各种运算符及其在表达式中的运算优先级是十分必要的. 算术运算 算术运算主 ...
- Hash!
Panda一个字符串是否是另一个字符串的子串 #include<bits/stdc++.h> using namespace std; const int mod=998244353,tt ...
- Jrebel 远程热部署[Idea]
服务器端 客户端-idea remote module 在服务器端,Tomcat的webapps下新建项目文件夹,如: demo/WEB-INF/classes/[jrebel.xml]
- Essay写作常见错误精选
Essay写作常见错误精选.Essay写作有许多不为人注意的小细节,如果申请人在这些细节上不注意,往往会犯一些很典型的错误.和小编一起来看看留学Essay写作常见错误解析. 1)直接把申请学校A的Es ...