二十八、实战演练之定义用户类模型、迁移用户模型类
1. Django默认用户模型类
(1)Django认证系统中提供了用户模型类User保存用户的数据。
-
User对象是认证系统的核心。
(2)Django认证系统用户模型类位置
- django.contrib.auth.models.User
(3)父类AbstractUser介绍
一旦一个模型里面的Meta里面abstract = True,那这个模型就是抽象模型。抽象模型有啥用呢?就是用来被继承。我们在迁移的时候,他不会把这个模型也去映射表。可以理解为就是一个模板,其他模型把他继承之后,就能共用里面的字段(比如AbstractUser里面的username、first_name、last_name、email等等)。
其中 USERNAME_FIELD 就是指定到底是哪个字段作为django默认的凭证。REQUIRED_FIELDS指定的字段和你username是否一对一匹配的上。
- User对象基本属性
-
- 创建用户(注册用户)必选:username、password
- 创建用户(注册用户)可选:email、first_name、last_name、last_login、date_joined、
- is_active 、is_staff、is_superuser
- 判断用户是否通过认证(是否登录):is_authenticated
- 创建用户(注册用户)的方法
user = User.objects.create_user(username, email, password, **extra_fields)
用户认证(用户登录)的方法
from django.contrib.auth import authenticate
user = authenticate(username=username, password=password, **kwargs)
- 处理密码的方法
设置密码:set_password(raw_password)
校验密码:check_password(raw_password)
2. 自定义用户模型类
思考:为什么要自定义用户模型类?
- 如今几乎所有的web应用都需要用户提供手机号码,单默认的用户模型类中没有mobile字段
- 随着业务的发展,未来很可能需要自定义用户模型
- django强烈推荐在开始一个项目时设置一个自定义的用户模型如何自定义用户模型类?
- 继承自AbstractUser(最简单可行的方法,详情见官方文档) 。新增mobile 字段。
在users.models.py 模块中定义模型如下:
在通过 createsuperuser 管理命令创建用户时,将提示输入mobile字段
REQUIRED_FIELDS = ['mobile']
from django.db import models
from django.contrib.auth.models import AbstractUser
from django.core.exceptions import ValidationErrordef validate_mobile(value):if not re.match(r'1[3-9]\d{9}', value): raise ValidationError('手机号码格式不正确')class User(AbstractUser): """Custom user model.Add mobile field to Django user model """# 添加一个mobile字段mobile = models.CharField('手机号码', max_length=11, unique=True, help_text='手机号码', null=True, blank=True,error_messages={'unique': '手机号码已注册'}, validators=[validate_mobile])# 如果希望用email作为用户名,# USERNAME_FIELD = 'email'def __str__(self): return self.usernameclass Meta:db_table = 'tb_user' # 表 名verbose_name = 'user' # 站点显示名verbose_name_plural = 'users' # 复数显示REQUIRED_FIELDS = ['mobile'] # 在通过 createsuperuser 管理命令创建用户时,将提示输入mobile字段
模型写好之后,是不是要迁移?但是现在不能去迁移?为啥?因为现在去迁移会跟我们本身自带的User模型造成冲突。所以我们要去认证只能有一个用户模型。往下看第四大点。
知识要点
1. Django自带用户认证系统,核心就是User对象,并封装了一系列可用的方法和属性。
2. Django用户认证系统包含了一系列对用户的操作,比如:模型类,认证,权限,分组,密码处理等。
3. Django用户认证系统中的用户模型类可以自定义,最简单的方法是继承自AbstractUser。
4. 更多Django中的自定义验证见官方文档
3. 迁移用户模型类
(1)指定用户模型类
Django是通过配置项AUTH_USER_MODEL 来确定项目中到底使用哪个用户模型,所以我们需要修改配置指定我们的自定义的用户模型。
配置规则:
AUTH_USER_MODEL = '应用名.模型类名'
注意:应用要在INSTALLED_APPS 中注册,且一定要在第一次迁移之前要设置好此项
# 指定本项目用户模型类 settings.py 设置
AUTH_USER_MODEL = 'users.User'
(2)迁移用户模型类
创建迁移文件
python manage.py makemigrations
执行迁移文件
python manage.py migrate
(3) 知识要点
1. 用户认证系统中的用户模型类,是通过全局配置项AUTH_USER_MODEL 决定的。
2. 如果迁移自定义用户模型类,必须先配置AUTH_USER_MODEL 。
3. 注意在迁移之前,运行服务会报错,因为默认项目依赖用户模型
4.验证自定义User模型中定义的一些字段
(1)REQUIRED_FIELDS
在通过 createsuperuser 管理命令创建用户时,将提示输入mobile字段
REQUIRED_FIELDS = ['mobile']
(2)max_length=11
(3)validators=[validate_mobile] 校验器可以列表嵌套多个校验函数
(4) 判断用户是否通过认证is_authenticated
进入shell之前,我们先安装ipython
pip install ipython
密码是加密的,这个就不说啦。就是给大家看一哈。
is_authenticated
(5)创建用户create和create_user的区别
上面我通过 python manage.py createsuperuser 创建超级管理员的时候,然后我在shell中查看daxia用户的密码发现是加密。
但是我通过 User.objects.create(username='test',password='123456')去创建用户的时候,发现密码却是明文。(TODO:后面去校验的时候永远不会通过)
此时我用User.objects.create_user(username='健健', password='123456')去创建用户的时候,发现密码确实加密的。
大家应该发现区别了吧~
(6)authenticate(用户认证(用户登录)的方法)
验证通过的话会返回这个用户
from django.contrib.auth import authenticate
user = authenticate(username=username, password=password, **kwargs)
验证返回不通过的话,就不会返回
(7)check_password检查密码
(8)set_password设置密码
因为上面我们create创建的用户的密码是明文的,那这个时候我们把他修改一下。
密码是不是加密啦。
注意:对象.set_password(raw_password)后,记得 对象.save()保存一下。
相关文章:
二十八、实战演练之定义用户类模型、迁移用户模型类
1. Django默认用户模型类 (1)Django认证系统中提供了用户模型类User保存用户的数据。 User对象是认证系统的核心。 (2)Django认证系统用户模型类位置 django.contrib.auth.models.User(3)父类AbstractUs…...
Java Virtual Machine的结构 3
1 Run-Time Data Areas 1.1 The pc Register 1.2 Java Virtual Machine Stacks 1.3 Heap 1.4 Method Area JVM方法区是在JVM所有线程中共享的内存区域,在编程语言中方法区是用于存储编译的代码、在操作系统进程中方法区是用于存储文本段,在JVM中方法…...
linux ubuntu22 安装neo4j
环境:neo4j 5 ubuntu22 openjdk-17 neo4j 5 对 jre 版本要求是 17 及以上,且最好是 openjdk,使用比较新的 ubuntu 系统安装比较好, centos7 因为没有维护,yum 找不到 openjdk-17了。 官方的 debian 系列安装教程&a…...
模型实战(7)之YOLOv8推理+训练自己的数据集详解
YOLOv8推理+训练自己的数据集详解 最近刚出的yolov8模型确实很赞啊,亲测同样的数据集用v5和v8两个模型训练+预测,结果显示v8在检测精度和准确度上明显强于v5。下边给出yolov8的效果对比图: 关于v8的结构原理在此不做赘述,随便搜一下到处都是。1.环境搭建 进入github进行git…...
火车进出栈问题 题解
来源 卡特兰数 个人评价(一句话描述对这个题的情感) …~%?..,# *☆&℃$︿★? 1 题面 一列火车n节车厢,依次编号为1,2,3,…,n。每节车厢有两种运动方式,进栈与出栈,问n节车厢出栈的可能排列方式有多少种。 输入…...
Unity学习日记12(导航走路相关、动作完成度返回参数)
目录 动作的曲线与函数 创建遮罩 导航走路 设置导航网格权重 动作的曲线与函数 执行动作,根据动作完成度返回参数。 函数,在代码内执行同名函数即可调用。在执行关键帧时调用。 创建遮罩 绿色为可效用位置 将其运用到Animator上的遮罩,可…...
基于bearpi的智能小车--Qt上位机设计
基于bearpi的智能小车--Qt上位机设计 前言一、界面原型1.主界面2.网络配置子窗口模块二、设计步骤1.界面原型设计2.控件添加信号槽3.源码解析3.1.网络链接核心代码3.2.网络设置子界面3.3.小车控制核心代码总结前言 最近入手了两块小熊派开发板,借智能小车案例,进行鸿蒙设备学…...
汇编语言与微机原理(1)基础知识
前言(1)本人使用的是王爽老师的汇编语言第四版和学校发的微机原理教材配合学习。(2)推荐视频教程通俗易懂的汇编语言(王爽老师的书);贺老师C站账号网址;(3)文…...
ASEMI代理瑞萨TW8825-LA1-CR汽车芯片
编辑-Z TW8825-LA1-CR在单个封装中集成了创建多用途车载LCD显示系统所需的许多功能。它集成了高质量的2D梳状NTSC/PAL/SECAM视频解码器、三重高速RGB ADC、高质量缩放器、多功能OSD和高性能MCU。TW8825-LA1-CR其图像视频处理能力包括任意缩放、全景缩放、图像镜像、图像调整和…...
什么是 .com 域名?含义和用途又是什么?
随着网络的发展,网络上出现了各种不同后缀的域名,这些域名的后缀各有不同的含义,也有不同的用途。今天,我们就一起来探讨一下 .com 后缀的域名知识。 .com 域名是一种最常见的顶级域名,它是由美国国家网络信息中心&…...
VueX快速入门(适合后端,无脑入门!!!)
文章目录前言State和Mutations基础简化gettersMutationsActions(异步)Module总结前言 作为一个没啥前端基础(就是那种跳过js直接学vue的那种。。。)的后端选手。按照自己的思路总结了一下对VueX的理解。大佬勿喷qAq。 首先我们需要…...
前列腺癌论文笔记
名词解释 MRF: 磁共振指纹打印技术( MR Fingerprinting)是近几年发展起来的最新磁共振技术,以一种全新的方法对数据进行采集、后处理和实现可视化。 MRF使用一种伪随机采集方法,取代了过去为获得个体感兴趣的参数特征而使用重复系列数据的采集方法&…...
Python+Yolov5道路障碍物识别
PythonYolov5道路障碍物识别如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助!前言这篇博客针对<<PythonYolov5道路障碍物识别>>编写代码,代码整洁,规则,易读。 学习与…...
全新升级,EasyV 3D高德地图组件全新上线
当我们打开任意一个可视化搭建工具或者搜索数据可视化等关键词,我们会发现「地图」是可视化领域中非常重要的一种形式,对于许多可视化应用场景都具有非常重要的意义,那对于EasyV,地图又意味着什么呢?EasyV作为数字孪生…...
从管理到变革,优秀管理者的进阶之路
作为一位管理者,了解自身需求、企业需求和用户需求是非常重要的。然而,仅仅满足这些需求是不够的。我们还需要进行系统化的思考,以了解我们可以为他人提供什么价值,以及在企业中扮演什么样的角色。只有清晰的自我定位,…...
安装Anaconda3
安装Anaconda3 下载安装文件 可以去官网下载 https://repo.anaconda.com/archive/根据自己的操作系统选择合适的Anaconda版本 我选择的是Anaconda3-2021.05-Linux-x86_64.sh的版本 方法一:可以下载到本地然后在上传到虚拟机 方法二:在终端输入以下…...
HTTPS,SSL(对称加密和非对称加密详解)
上一篇博客(HTTP详解_徐憨憨!的博客-CSDN博客)详细讲解了关于HTTP的知识,了解到HTTP协议下的数据传输是一种明文传输,既然是明文传输,可能导致在传输过程中出现一些被篡改的情况,此时就需要对所…...
【数据结构】还不懂算法复杂度?一文带你速解
前言:前面我们已经系统的学完C语言的相关知识,现在我们已经较为熟练的掌握了C语言中的各中代码语法和结构使用,能够使用代码来解决一些简单问题。但是对于一个程序员来说,仅仅会语法是远远不够的,从今天开始,我们将进入…...
案例描述:update中,MySQL inner join 和 left join的区别,小结果集驱动大结果集
场景描述 以一个场景为例: 单据A:下游子表 (数据量级小) 单据B:下游主表(数据量级小) 单据C:中游子表(数据量级小) 单据D:中游主表(…...
CF1784D Wooden Spoon
CF1784D Wooden Spoon 题目大意 有2n2^n2n个人,进行nnn轮比赛。比赛的图是一棵完全二叉树。编号小的人一定能赢编号大的人,如果一个人满足: 第一次比赛被打败打败这个人的人在第二次比赛中被打败打败上一个人的人在第三次比赛中被打败…\d…...
【数据结构】栈
文章目录😺前言栈初始化栈顶入栈栈顶出栈栈体判空栈的数据个数获取栈顶元素栈的销毁整体代码😼写在最后😺前言 👻前面我们学习了链表,总算是跨过一个台阶了,本章带大家轻松一波,领悟一下栈的魅力…...
C++单继承和多继承
C单继承和多继承继承单继承写法继承中构造函数的写法写法构造和析构的顺序问题多继承继承 1.继承,主要是遗传学中的继承概念 2.继承的写法,继承中的权限问题 3.继承中的构造函数的写法 继承:子类没有新的属性,或者行为的产生 父类…...
金三银四,今年企业招聘如何?
又是一年求职季,互联网人找工作,和找对象一样严谨,不随便放手更不随便牵手。于是挑挑拣拣,最后的结果可能就是把自己挑剩下了。 时间已经悄然滑进3月中旬,多少无处安放的青春,还没尘埃落定?优秀…...
数字信号处理:滤波、频谱
一、滤波算法 应该说数字滤波器可以有效减小50Hz工频的干扰,完全消除是不可能的。以20ms为最小单位的整倍数周期滤波,可以有效减少工频的干扰。 软件中构建 IIR 陷波或者 FIR 带阻 数字滤波器,消除工频干扰对测量结果的影响。 1. 自适应滤波 …...
C#等高级语言运行过程
C#等高级语言运行流程:假设您编写了一个 C# 程序并将其保存在一个称为源代码的文件中。特定于语言的编译器将源代码编译成 MSIL(Microsoft 中间语言),也称为 CIL(通用中间语言)或 IL(中间语言&a…...
如何优雅的用POI导入Excel文件
在企业级项目开发中,要经常涉及excel文件和程序之间导入导出的业务要求,那么今天来讲一讲excel文件导入的实现。java实现对excel的操作有很多种方式,例如EasyExcel等,今天我们使用的是POI技术实现excel文件的导入。POI技术简介1.P…...
【AI 工具】文心一言内测记录
文章目录一、申请内测二、收到内测邀请三、激活内测四、开始使用1、普通对话2、生成图片3、生成代码4、写剧本5、生成小说五、问题反馈一、申请内测 到 https://yiyan.baidu.com/welcome 页面 , 点击 " 开始体验 " 按钮 , 申请试用 ; 申请时 , 需要填写相关信息 ; 主…...
Github的使用
Github Date: March 8, 2023 Sum: Github的使用 Github 了解开源相关的概念 1. 什么是开源 2. 什么是开源许可协议 开源并不意味着完全没有限制,为了限制使用者的使用范围和保护作者的权利,每个开源项目都应该遵守开源许可协议( Open Sou…...
抽丝剥茧还原真相,记一次神奇的崩溃
作者:靳倡荣 本文详细回放了一个崩溃案例的分析过程。回顾了C多态和类内存布局、pc指针与芯片异常处理、内存屏障的相关知识。 一、不讲“武德”的崩溃 1.1 查看崩溃调用栈 客户反馈了一个崩溃问题,并提供了core dump文件,查看崩溃调用栈如下…...
学习笔记八:docker资源配额
docker容器控制cpudocker容器控制cpu指定docker容器可以使用的cpu份额两个容器A、B的cpu份额分别为1000和500,结果会怎么样?给容器实例分配512权重的cpu使用份额总结CPU core核心控制扩展:服务器架构CPU配额控制参数的混合使用cpuset-cpus和c…...
wordpress文章没缩略图/培训网站推广
现在的上班族,都是依靠电脑在办公的,所以每天接收到的电子文件有很多,这些都跟自己的工作息息相关,所以一般都是需要保存在电脑里面的,但是电脑就真的很安全吗?能确保数据的安全吗? 其实电脑虽然…...
上海企业建设网站电话/办公软件速成培训班
点击上方 "Python人工智能编程" 关注,星标或者置顶每天11点准时推送,第一时间送达来自:量子位 报道 | 公众号 QbitAI | 编辑:真经君正文你是否也在朋友圈看过这样的小推广:「你要悄悄学Python,然…...
手机网站制作哪家公司好/目前好的推广平台
康拓展开: 求出当前排列是全排列中的第几个 Xa[n]*(n-1)!a[n-1]*(n-2)!...a[i]*(i-1)!...a[1]*0! 其中a[i]是当前位置后面有多少个比当前位置大的数, 可以看成是求当前位置的逆序。 int cantor(int n, int num[]){int c 0;int cnt 0;for(int i 0; i …...
沈阳软件公司 网站制作/推广产品的软文
假如有jsp页面要实现一个列表信息,格式如下: 第1条信息 第2条信息 第3条信息 第4条信息 第5条信息 第6条信息 第7条信息 第8条信息 ..... 搜索过别的方法,很多人运用jsp代码写入页面来进行循环判断。其实用struts2自带的标签可以实现同样效果…...
wordpress 不提示更新/我想做百度推广
如果需要保持之前的顺序,使用Set中的LinkedHashSet就是有序的 对象重复是指对象里面的变量的值都相等,并不定是地址。list集合存储的类型是基础类型还比较好办,直接把list集合转换成set集合就会自动去除。 当set集合存储的是对象类型时&…...
apmserv搭建网站/2022年最好用的搜索引擎
在近日的Computex 2017上,微软和高通宣布联手推出新一代基于骁龙835移动PC平台的“永久连接”Windows 10 PC解决方案。据悉,此次新方案的关键将突出性能功效和移动便携方面,预计首批OEM合作伙伴将包括华硕、惠普和联想,预计售价会…...