继承自AbstractBaseUser模型

如果你想要修改默认的验证方式,并且对于User模型上的一些字段不想要,那么可以自定义一个模型,然后继承自AbstractBaseUser,再添加你想要的字段,这种方式会比较麻烦,最好是确定自己对Django比较了解才推荐使用。
(1)创建模型, 示例代码如下:
from django.db import models
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager
from django.contrib.auth.models import AbstractUser class UserManager(BaseUserManager):
def _create_user_(self, telephone, username, password, **kwargs):
if not telephone:
raise ValueError('请输入密码!')
if not username:
raise ValueError('请输入用户名!') # 注意,这里是self.model代表的是当前的User模型而不能写self.User()因为UserManager没有这个属性
user = self.model(telephone=telephone, username=username)
user.set_password(password)
user.save()
return user def create_user(self, telephone, username, password, **kwargs):
kwargs['is_super'] = False
return self._create_user_(telephone=telephone, username=username, password=password, **kwargs) def create_superuser(self, telephone, username, password, **kwargs):
kwargs['is_super'] = True
return self._create_user_(telephone=telephone, username=username, password=password, **kwargs) # PermissionsMixin: 是定义用户时定义用户权限,必须继承
# AbstractBaseUser:User的基类其中涉及的字段最少,如果先定义自己的User模型,
# 将大部分Django中默认的字段删除的话,就可以继承该类
# AbstractBaseUser类中定义的字段有:password,last_login,is_active,is_super
class User(AbstractBaseUser, PermissionsMixin):
# 必须设置的两个字段username,email
username = models.CharField(max_length=100)
email = models.EmailField(unique=True)
telephone = models.CharField(max_length=11, unique=True) is_active = models.BooleanField(default=True) # 唯一性验证设置为telephone
USERNAME_FIELD = 'telephone'
# REQUIRED_FIELDS为空的列表代表的是,在验证用户登录的时候只需要输入password和USERNAME_FIELD指定的字段就行了
# 如果还想在验证用户的时候输入其他的字段,那么就可以将该字段设置在该列表中。
REQUIRED_FIELDS = [] # 以上自定义的User模型上并没有objects方法,所以我们需要自定义
objects = UserManager() def get_full_name(self):
return self.username def get_short_name(self):
return self.username
其中password、last_login、is_active都是定义好的字段类型,就不用修改了,
(2)在settings.py中配置AUTH_USER_MODEL='front.User'
(3)在views.py中使用自定义的User模型创建user。示例代码如下:
<!--1. 创建普通用户-->
from django.http import HttpResponse
from .models import User def index(request):
user = User.objects.create_user(telephone='18833332222', username='小龙虾', password='111111')
user.email = '111111@qq.com'
user.save()
return HttpResponse('success!') <!--2. 创建超级用户-->
def index(request):
user = User.objects.create_superuser(telephone="18833337777", username='云中云', password='888888')
user.email = '111111@qq.com'
user.save()
return HttpResponse('success!')
(4)此时,同样可以使用外键与自定义的User模型相关联,示例代码如下:
from django.contrib.auth import get_user_model

class Article(models.Model):
title = models.CharField(max_length=100)
content = models.CharField(max_length=100)
<!--在使用外键的时候,可以使用get_user_model()函数动态的获取关联的模型,这个模型是从settings.py文件中的AUTH_USER_MODEL中读取的。-->
author = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)

165.扩展User模型-继承AbstractBaseUser的更多相关文章

  1. 164.扩展User模型-继承AbstractUser

    继承自AbstractUser: 如果Abstractuser中定义的字段不能够满足你的项目的要求,并且不想要修改原来User对象上的一些字段,只是想要增加一些字段,那么这时候可以直接继承自djang ...

  2. Odoo中的模型继承、视图继承、Qweb模板继承详解

    转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826114.html 在实际开发过程中,经常会遇到需要修改Odoo原生逻辑的情况.然而,直接修改Odoo底 ...

  3. 162.扩展User模型-使用Proxy模型

    扩展用户模型: Django内置的User模型虽然已经足够强大了,但是有时候还是不能满足我们的需求,比如在验证用户登录的时候,它用的是用户名作为验证,而我们有时候需要通过手机号码或者是邮箱进行验证,还 ...

  4. Java+7入门经典 - 6 扩展类与继承 Part 1/2

    第6章 扩展类与继承 面向对象编程的一个重要特性: 允许基于已定义的类创建新的类; 6.1 使用已有的类 派生 derivation, 派生类 derived class, 直接子类 direct s ...

  5. Java+7入门经典 - 6 扩展类与继承 Part 2/2

    6.12 设计类 1) 通过已定义的基类派生子类, 并且添加方法和数据成员来自定义子类, 创建出类的层次结构; Dog 'IS-A' Animal 2) 定义一系列没有层次结构, 由类对象作为数据成员 ...

  6. .NET MVC4 实训记录之二(扩展WebSecurity模型下的UserProfile表)

    使用VS2013创建MVC4项目后,自动生成的代码中默认使用WebSecurity模型创建用户管理,生成以下数据库:

  7. odoo 模型继承

    在odoo中有两种模型的继承机制(传统方式和委托继承方式) 重点:在__manifest__.py中找到depends,加上要继承的模块 'depends': ['account'] 注意继承的模型所 ...

  8. MVC扩展Filter, 通过继承AuthorizationAttribute限制IP

    为什么需要AuthorizationAttribute 在没有Authorization系统属性之前,我们可能这样判断:Request.IsAuthenticated && User. ...

  9. 163.扩展User模型-一对一方式扩展

    一对一外键 如果你对用户验证方法authenticate没有更多的要求,就是使用username和password就可以完成用户的登录验证工作,但是想要在原来的模型的基础上添加新的字段,那么就可以使用 ...

随机推荐

  1. Git学习笔记(windows git之初体验)

    阿里国内镜像地址: https://npm.taobao.org/mirrors/git-for-windows/ 最近在学习廖雪峰老师关于git的教程,链接可以在我的首页找到.首先使用国内镜像下载并 ...

  2. 抽取vs2010安装包中vc++ runtime

    写于2015-3-21 16:59 由qq空间转过来,格式有点乱     之前遇到一个问题,c++\cli的程序部署在服务器上面,程序运行后没有反应就退出了,日志管理器中记录两个错误信息分别如下:   ...

  3. CMD命令下图片合成一句话木马命令

    非常简单,我们只需要一张图片1.jpg一句话木马写好的php文件 1.php之后我们进入到命令行.注意:将php文件和图片文件放到同一目录下,cmd也要跳转到放文件的目录下之后执行命令 copy .j ...

  4. 小白的linux笔记8:linux自动运行爬虫并发送提醒邮件

    有了成功运行的爬虫后,希望能每天定时运行,且遇到错误时能及时发出提醒. 发出提醒 可以用mailx发出邮件做提醒.没有的话先安装Yum install mailx. 以qq邮箱为例,需要设置/etc/ ...

  5. 笔记-Git基础

    git配置 git config --global user.name "xxx" //配置用户名 git config --global user.email "xxx ...

  6. Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set…

    php打印小票错误提示:Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activate ...

  7. C# 数组冒泡排序复习

    using System; namespace runoob { class MyClass { static void Main(string[] args) { MyClass1 myClass ...

  8. QuantLib 金融计算——自己动手封装 Python 接口(2)

    目录 QuantLib 金融计算--自己动手封装 Python 接口(2) 概述 如何封装一项复杂功能? 寻找最小功能集合的策略 实践 估计期限结构参数 修改官方接口文件 下一步的计划 QuantLi ...

  9. P1553 数字反转(升级版)(copy(),reverse(),find(),substr(),erase())

    题目描述 给定一个数,请将该数各个位上数字反转得到一个新数. 这次与 NOIp2011 普及组第一题不同的是:这个数可以是小数,分数,百分数,整数.整数反转是将所有数位对调:小数反转是把整数部分的数反 ...

  10. Python中字符串的学习

    Python中字符串的学习 一.字符串的格式化输出 % 占位符 %s 字符串 %d integer %x 十六进制 integer %f float 指定长度 %5d 右对齐,不足左边补空格 %-5d ...