继承自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)

最新文章

  1. CSS的一些基础知识
  2. 10月wish me luck
  3. The file couldn’t be opened because you don’t have permission to view it
  4. PHP面向对象的一些深入理解
  5. matlab 之基础使用
  6. JavaScript语言标识符和保留字
  7. java中Map,List与Set的区别
  8. 数据库 一致性读&amp;&amp;当前读
  9. [转]前端开发必备 40款优秀CSS代码编写工具推荐
  10. C#操作XML方式
  11. 深入解读Python的unittest并拓展HTMLTestRunner
  12. 【转载】makefile经典教程
  13. svn&quot;database disk image is malformed&quot;错误解决
  14. thinkPHP中M()和D()的区别
  15. 1021. Remove Outermost Parentheses删除最外层的括号
  16. 将批量指定的docker镜像打成文件
  17. 一步步教你如何在 Visual Studio 2013 上使用 Github
  18. re正则模块
  19. Event(补交作业)
  20. redis 分布式,主从同步

热门文章

  1. View Binding初探
  2. js对象模型1
  3. VScode搭建OpenCV环境
  4. opencv中的图像矩(空间矩,中心矩,归一化中心矩,Hu矩)
  5. 前端调用本地摄像头实现拍照(vue)
  6. Excel_b_1
  7. vue history模式 ios微信分享 踩过的坑
  8. Windows通过DOS命令行设置IP地址
  9. 有关css编写文字动态下划线
  10. shadow文件中密码的加密方式