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 ...
随机推荐
- 标准查询运算符---LINQ
Where 根据给定的谓词对序列进行过滤 Select 指定要包含一个对象或对象的一部分 SelectMany 一种查询类型,返回集合的集合.该方法将这些结果合并为一个单独的集合 Take 接受一个输 ...
- POJ 2253:Frogger 求每一条路径最大值里面的最小值
Frogger Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 31490 Accepted: 10150 Descrip ...
- node - 处理跨域 ( 两行代码解决 )
1,安装 cors 模块 : npm install cors 2,代码 : var express = require('express') var app = express() var cors ...
- 【LeetCode】加油站
[问题]在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升. 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升.你从其中 ...
- Python入门必学知识,30万年薪Python工程师带你学
Python是一种计算机编程语言.计算机编程语言和我们日常使用的自然语言有所不同,最大的区别就是,自然语言在不同的语境下有不同的理解,而计算机要根据编程语言执行任务,就必须保证编程语言写出的程序决不能 ...
- PHPExcel方法总结
下面是总结的几个使用方法include 'PHPExcel.php';include 'PHPExcel/Writer/Excel2007.php';//或者include 'PHPExcel/Wri ...
- CSS隐藏商务通等内容
CSS隐藏商务通等内容<style>#qiao-wrap{display:none !important;} </style>
- layui-注册界面
注册页面register.html源代码: <!DOCTYPE html> <html lang="en"> <head> <meta c ...
- Ajax学习系列——创建XMLHttpRequest对象
Ajax - 创建XMLHttpRequest对象 首先介绍什么是XMLHttpRequest: XMLHttpRequest是Ajax的基础.中文可以解释为可扩展超文本传输请求.术语缩写为XHR. ...
- 使用HttpURLConnection方式访问接口
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...