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
...

  

django-替代为自定义的User model的更多相关文章

  1. django之自定义软删除Model

    软删除 简单的说,就是当执行删除操作的时候,不正真执行删除操作,而是在逻辑上删除一条记录.这样做的好处是可以统计数据,可以进行恢复操作等等. 预备知识 Managers Managers 是djang ...

  2. Django中的自定义过滤器

    一.为什么要自定义Django中的自定义过滤器:Django中提供了很多内置的过滤器和标签,详见链接django官网,主要有以下几个: autoescape(自动转义)block(模板继承)csrf_ ...

  3. Django 反向生成 从数据库生成Model

    Django 反向生成 从数据库生成Model 使用Django生成Model python manage.py inspectdb或python manage.py inspectdb > m ...

  4. Django关于设置自定义404和安装debug-toolbar的笔记

    Django关于设置自定义404和安装debug-toolbar的笔记 关于设置404 先做好404页面,然后在views.py文件中做好映射,最后是在urls.py做好路由,而这个urls.py必须 ...

  5. 第三百一十四节,Django框架,自定义分页

    第三百一十四节,Django框架,自定义分页 自定义分页模块 #!/usr/bin/env python #coding:utf-8 from django.utils.safestring impo ...

  6. Django(模板语言-自定义filter和simple_tag)

    Django(模板语言-自定义filter和simple_tag)   filter过滤器的主要形式:变量|函数,意思是将变量交给函数处理,而自定义filter就是自己定义函数,因为用到已有的很少. ...

  7. 3- vue django restful framework 打造生鲜超市 - model设计和资源导入

    3- vue django restful framework 打造生鲜超市 - model设计和资源导入 使用Python3.6与Django2.0.2(Django-rest-framework) ...

  8. 如何让django模型中的字段和model名显示为中文

    如何让django模型中的字段和model名显示为中文:在模型中加入class Meta即可 class People(models.Model): name = models.CharField(n ...

  9. tensorflow 2.0 技巧 | 自定义tf.keras.Model的坑

    自定义tf.keras.Model需要注意的点 model.save() subclass Model 是不能直接save的,save成.h5,但是能够save_weights,或者save_form ...

随机推荐

  1. 标准查询运算符---LINQ

    Where 根据给定的谓词对序列进行过滤 Select 指定要包含一个对象或对象的一部分 SelectMany 一种查询类型,返回集合的集合.该方法将这些结果合并为一个单独的集合 Take 接受一个输 ...

  2. POJ 2253:Frogger 求每一条路径最大值里面的最小值

    Frogger Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 31490   Accepted: 10150 Descrip ...

  3. node - 处理跨域 ( 两行代码解决 )

    1,安装 cors 模块 : npm install cors 2,代码 : var express = require('express') var app = express() var cors ...

  4. 【LeetCode】加油站

    [问题]在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升. 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升.你从其中 ...

  5. Python入门必学知识,30万年薪Python工程师带你学

    Python是一种计算机编程语言.计算机编程语言和我们日常使用的自然语言有所不同,最大的区别就是,自然语言在不同的语境下有不同的理解,而计算机要根据编程语言执行任务,就必须保证编程语言写出的程序决不能 ...

  6. PHPExcel方法总结

    下面是总结的几个使用方法include 'PHPExcel.php';include 'PHPExcel/Writer/Excel2007.php';//或者include 'PHPExcel/Wri ...

  7. CSS隐藏商务通等内容

    CSS隐藏商务通等内容<style>#qiao-wrap{display:none !important;} </style>

  8. layui-注册界面

    注册页面register.html源代码: <!DOCTYPE html> <html lang="en"> <head> <meta c ...

  9. Ajax学习系列——创建XMLHttpRequest对象

    Ajax - 创建XMLHttpRequest对象 首先介绍什么是XMLHttpRequest: XMLHttpRequest是Ajax的基础.中文可以解释为可扩展超文本传输请求.术语缩写为XHR. ...

  10. 使用HttpURLConnection方式访问接口

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...