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 ...
随机推荐
- js学习(四)
一.typeof 操作符,null, undefinde 1. typeof 操作符来检测变量的数据类型. typeof "John" // 返回 string typeof 3. ...
- python2学习------基础语法1 (变量、分支语句、循环语句、字符串操作)
1.变量类型 Numbers(数字):int,float,long String(字符串) List(列表) tuple(元组) dict(字典) bool(布尔):True,False # 删除变量 ...
- LeetCode242 有效的字母异位词(Java字符数组排序&自定义排序记录)
题目: 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词. 示例 1: 输入: s = "anagram", t = "nagaram& ...
- HihoCoder第五周:标准动态规划
这周的题目是最标准最简单的动态规划了,自己一直以来对动态规划都不是很理解,这次也是好好记录一下. 题目1 :数字三角形 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 问题描述 ...
- ubuntu 新建用户后 不能使用TAB键、上下键,命令行不显示当前路径的解决
因默认ubuntu创建的普通帐号,默认shell为/bin/sh,而这不支持tab等键的,所以将「指定用户」帐号的shell改为/bin/bash就可以了. 1.查看当前的shell:# echo $ ...
- python matplotlib绘图/sklearn包--make_blobs()
1.make_bolbs() 函数 from sklearn.datasets.samples_generator import make_blobs import numpy as np impor ...
- linux 查看ip、用户、时间对应执行的命令
这个需要使用到history命令.可以加数字,返回最近执行的几条命令.如果不加数字会返回所有的历史命令. [root@localhost ~]# history 20 1015 rm stdin.lo ...
- Vue(九)---自定义指令(directive )
1.无参数 自定义指令的方式:1. 使用Vue.directive 来自定义2. 第一个参数就是 指令名称 xart3. el 表示当前的html dom对象4. 在方法体内就可以通过 innerHT ...
- 4 GC算法与种类
- 5款国内免费CDN服务商及使用点评
第一款,百度加速乐 加速乐目前被百度收购,这样百度也有了自己运营的CDN产品,可以丰富自身站长平台工具使用用户群.目前有免费用户和付费用户的区别,对于一般的网站免费方案也足够使用.特点具备智能解析.加 ...