当前位置: 首页 > news >正文

二十八、实战演练之定义用户类模型、迁移用户模型类

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道路障碍物识别如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01;前言这篇博客针对<<PythonYolov5道路障碍物识别>>编写代码&#xff0c;代码整洁&#xff0c;规则&#xff0c;易读。 学习与…...

全新升级,EasyV 3D高德地图组件全新上线

当我们打开任意一个可视化搭建工具或者搜索数据可视化等关键词&#xff0c;我们会发现「地图」是可视化领域中非常重要的一种形式&#xff0c;对于许多可视化应用场景都具有非常重要的意义&#xff0c;那对于EasyV&#xff0c;地图又意味着什么呢&#xff1f;EasyV作为数字孪生…...

从管理到变革,优秀管理者的进阶之路

作为一位管理者&#xff0c;了解自身需求、企业需求和用户需求是非常重要的。然而&#xff0c;仅仅满足这些需求是不够的。我们还需要进行系统化的思考&#xff0c;以了解我们可以为他人提供什么价值&#xff0c;以及在企业中扮演什么样的角色。只有清晰的自我定位&#xff0c;…...

安装Anaconda3

安装Anaconda3 下载安装文件 可以去官网下载 https://repo.anaconda.com/archive/根据自己的操作系统选择合适的Anaconda版本 我选择的是Anaconda3-2021.05-Linux-x86_64.sh的版本 方法一&#xff1a;可以下载到本地然后在上传到虚拟机 方法二&#xff1a;在终端输入以下…...

HTTPS,SSL(对称加密和非对称加密详解)

上一篇博客&#xff08;HTTP详解_徐憨憨&#xff01;的博客-CSDN博客&#xff09;详细讲解了关于HTTP的知识&#xff0c;了解到HTTP协议下的数据传输是一种明文传输&#xff0c;既然是明文传输&#xff0c;可能导致在传输过程中出现一些被篡改的情况&#xff0c;此时就需要对所…...

【数据结构】还不懂算法复杂度?一文带你速解

前言:前面我们已经系统的学完C语言的相关知识&#xff0c;现在我们已经较为熟练的掌握了C语言中的各中代码语法和结构使用&#xff0c;能够使用代码来解决一些简单问题。但是对于一个程序员来说&#xff0c;仅仅会语法是远远不够的&#xff0c;从今天开始&#xff0c;我们将进入…...

案例描述:update中,MySQL inner join 和 left join的区别,小结果集驱动大结果集

场景描述 以一个场景为例&#xff1a; 单据A&#xff1a;下游子表 &#xff08;数据量级小&#xff09; 单据B&#xff1a;下游主表&#xff08;数据量级小&#xff09; 单据C&#xff1a;中游子表&#xff08;数据量级小&#xff09; 单据D&#xff1a;中游主表&#xff08;…...

CF1784D Wooden Spoon

CF1784D Wooden Spoon 题目大意 有2n2^n2n个人&#xff0c;进行nnn轮比赛。比赛的图是一棵完全二叉树。编号小的人一定能赢编号大的人&#xff0c;如果一个人满足&#xff1a; 第一次比赛被打败打败这个人的人在第二次比赛中被打败打败上一个人的人在第三次比赛中被打败…\d…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...