Django(十一、auth认证模块)
文章目录
- 一、auth介绍
- auth认证相关模块及操作
- 扩展auth_user表
一、auth介绍
Django自带一个admin路由,但是需要我们提供管理员账户和密码,如果想要使用admin后台管理,需要先创建表,然后创建管理员账户。

直接执行数据类迁移命令即可产生默认的auth_user表,该表就是admin后台管理默认的认证表
1.创建超级管理员
python38 manage.py createsuperuser
在执行创建管理员命令后,运行环境会提示我们输入用户名,邮箱(选填),密码等信息,依次输入即可。这样我们的auth_user表中就会添加一条数据,这条数据就是管理员用户信息。

auth认证相关模块及操作
基于auth_user 表编写相关的各项功能:登录、校验用户是否登录、修改密码、注销登录等
from django.contrib import auth
from django.contrib.auth.models import User
1.用户注册功能
User.objects.create_user(username=username, password=password)
2.判断用户名和密码是否正常
user_obj= auth.authenticate(request,username=username,password=password)
3.判断用户是否登录
request.user.is_authenticated
4.获取登录用户对象数据
request.user
5.校验用户是否登录装饰器
from django.contrib.auth.decorators import login_required@login_required(login_url='/login/') 局部配置 @login_required 全局配置def is_login():pass配置文件中LOGIN_URL = '/login/'""" 括号里面的可以控制跳转的页面,全局配置,需要再配置文件中填写,如果有全局配置和局部配置,局部配置的函数会遵循局部配置的路由"""
6.校验原密码是否正确
request.user.check_password(原密码)
7.修改密码
request.user.set_password(新密码)
8.退出登录
auth.logout(request)
代码实现:
1.views视图
from django.contrib import auth
from django.contrib.auth.models import User# 用户注册
def register_func(request):if request.method =='POST':username=request.POST.get('username')password=request.POST.get('password')# 1.校验用户名是否已经存在res=User.objects.filter(username=username)if res:return HttpResponse('用户已经存在')# 2.注册用户# User.objects.create(username=username,password=password) # auth模块不能自己创建,因为密码无法实现加密操作User.objects.create_user(username=username,password=password)return render(request,'registerPage.html')# 用户登录
def login_func(request):print(request.user)if request.method =='POST':username=request.POST.get('username')password=request.POST.get('password')# 1.校验用户名和密码是否正确 无法比对密码,必须借助于auth模块提供的方法user_obj=auth.authenticate(request,username=username,password=password)print(user_obj.username)print(user_obj.password)""" 用户名和密码正确周,返回的是数据对象,不正确则放回None"""if user_obj:#2. 用户登录成功(返回给客户登录的凭证、令牌、随机字符串)auth.login(request,user_obj) # 自动操作django_session表"""当执行完上述的操作之后,我们就可以通过request.user直接获取到当前登录用户数据对象"""return HttpResponse('登录成功')return render(request, 'loginPage.html')from django.contrib.auth.decorators import login_required# 用户修改密码
@login_required() # 校验用户是否登录的装饰器
def set_pwd_func(request):if request.method=='POST':old_pwd = request.POST.get('old_pwd')new_pwd = request.POST.get('new_pwd')confirm_pwd = request.POST.get('confirm_pwd')if not new_pwd==confirm_pwd:return HttpResponse('两次密码不正确')# 1.判断原密码是否正确is_right= request.user.check_password(old_pwd)if not is_right:return HttpResponse('原密码不正确')#2.修改密码request.user.set_password(new_pwd)request.user.save() # 一定要保存return render(request,'setPwdPage.html')@login_required
def logout_func(request):auth.logout(request) # 自动去session表删除数据return HttpResponse('退出登录')2.html
<form action="" method="post">{% csrf_token %}<p>username:<input type="text" name="username"></p><p>password:<input type="text" name="password"></p><input type="submit">
</form>
问题1:

要想实现上述的操作,使用的是request.user.is_authenticated
1.html
{% if request.user.is_authenticated %}
<h>{{ request.user.username }}</h>{% else %}<a href="">注册</a><a href="">登录</a>
{% endif %}
2.views
def home_func(request):print(request.user)return render(request,'homePage.html',locals())
扩展auth_user表
在原来的基础authmok的功能,并且又想扩展auth_user表的字段
思路1:一对一字段关联(不推荐)
from django.contrib.auth.models import User
class OtherUser(models.Model):user = models.OneToOneField(to=User)""" 将User表与OtherUser的字段一一对应,操作起来很麻烦"""
思路2:替换auth_user表(推荐)
步骤1:模型层编写模型类继承AbstractUserfrom django.contrib.auth.models import AbstractUserclass UserInfo(AbstactUser): # 填写AbstactUser表中没有的字段phone=models.BinIntegerField()desc=models.TextField()
步骤2:一定要配置文件中声明替换关系AUTH_USER_MODEL='app01.UserInfo'# 告诉orm 使用app01 下的UserInfo表替换原先的auth_user表ps:替换还有一个前提,就是数据库迁移命令没有执行过(auth相关表没有创建),用全新的库
替换完成之后,再重新执行数据库迁移命令进行刷新。
相关文章:
Django(十一、auth认证模块)
文章目录 一、auth介绍auth认证相关模块及操作扩展auth_user表 一、auth介绍 Django自带一个admin路由,但是需要我们提供管理员账户和密码,如果想要使用admin后台管理,需要先创建表,然后创建管理员账户。 直接执行数据类迁移命令…...
WebSocket了解
一.什么是WebSocket WebSocket是HTML5下一种新的协议(websocket协议本质上是一个基于tcp的协议)它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯的目的Websocket是一个持久化的协议 二.websocket的原理 web…...
深度学习基础概念
1. 神经网络基础 神经元(Neuron): 了解神经网络的基本组成单元。激活函数(Activation Function): 学习常见的激活函数,如Sigmoid、ReLU等,以及它们在神经网络中的作用。前馈神经网络…...
vatee万腾科技先锋之选:vatee创新力驱动着未来发展
在科技潮流的浩荡前行中,Vatee万腾崭新的科技先锋之选正以强大的创新力引领着未来的发展。Vatee万腾凭借其前瞻性的技术理念和卓越的创新实践,成为业界的引领者,为整个科技行业树立了标杆。 Vatee万腾不仅仅是一家科技公司,更是一…...
MetaObject-BeanWrapper-MetaClass-Reflector的关系
MetaObject、BeanWrapper、MetaClass、Reflector之间是通过装饰器模式逐层进行装饰的。其中MetaObject、BeanWrapper是操作对象;MetaClass、Reflector是操作Class ObjectWrapper类结构图 BaseWrapper是对BeanWrapper、MapWrapper公共方法的提取及类图的优化&#…...
【JavaEE初阶】线程安全问题及解决方法
目录 一、多线程带来的风险-线程安全 1、观察线程不安全 2、线程安全的概念 3、线程不安全的原因 4、解决之前的线程不安全问题 5、synchronized 关键字 - 监视器锁 monitor lock 5.1 synchronized 的特性 5.2 synchronized 使用示例 5.3 Java 标准库中的线程安全类…...
uniapp高德、百度、腾讯地图配置 SHA1
uniapp高德、百度、腾讯地图配置 SHA1 当winr弹出cmd弹框后输入 keytool -list -v -keystore debug.keystore 显示keytool 不是内部或外部命令,也不是可运行的程序或批处理文件。可以先看看是否有下载jdk且配置了环境变量,具体操作如下:keyto…...
[AutoSAR存储] 车载存储层次 和 常用存储芯片概述
公知及经验整理,原创保护,禁止转载。 专栏 《AutoSAR存储》 <<<< 返回总目录 <<<< 1 存储系统层次 先抛个问题, 为什么要划分存储器的层次? 速度越快,但成本越高,从经济的角度规…...
进程并发-信号量经典例题-吸烟者问题
1 题目描述 吸烟者问题 在一个房间内有三个吸烟者和一个香烟供应者。为了制造并抽掉香烟,每个吸烟者需要三样物品:烟草、纸和火柴,供应者有丰富物品提供。在三个吸烟者中,第一个有自己的烟草,第二个有自己的纸&#…...
[ruby on rails] array、jsonb字段
一、jsonb # 新增 add_column :shi_tis, :setting, :jsonb, default: {}# string转jsonb def changechange_column :users, :setting, :jsonb, using: setting::jsonb, default: {} end# 加索引 add_index :users, :setting, using: :gin # 这样就为setting jsonb字段创建了一…...
Feign接口请求返回异常 no suitable HttpMessageConvert found for response type
问题场景: 后端调用feign接口请求, 接口返回异常, no suitable HttpMessageConvert found for response type 问题描述 报错异常如下: //根据图片特征 去查询人员信息ResultVo<List> personVos ipbdFaceLibPersonApi.queryFacePersonByFeatur…...
【brpc学习实践九】mbvar及bvar可观测
概念、学习地址 mbvar中有两个类,分别是MVariable和MultiDimension,MVariable是多维度统计的基类,MultiDimension是派生模板类。也是主要用来多多线程计数用的。这里用到再详细去了解即可 https://github.com/luozesong/brpc/blob/master/do…...
Vue 3
Vu3 简述: 快速上手,开发即用,具体知识参考官方文档 具备知识 Vite 了解即可,使用时按需配置,更多参考官方文档( https://cn.vitejs.dev) 简述: 极速响应工具 (构建、启动、更新、插件使用等) 核心思想: 依赖 和 源码 工作原理: 引入rollup: 灵活,相比webpack速度快,…...
GitHub Copilot 替代品?
应该没人不知道代码补全这个东西了吧,第一次使用 GitHub Copilot 之后,只觉得真香,现在居然还有一点离不了了。后面因为收费原因,就没再用了,找了一个 tabnine 替代,用了几天,体验是真的比不上 …...
设计循环队列(详解)
呀哈喽,我是结衣 今天给大家带来的内容如标题所述,我们来设计环形队列,虽然队列没有讲,但是我就是想讲啊。那么环形队列现在开始。 队列的属性 在设计环形队列前,我们先要了解队列的特点(先进先出&#x…...
【Python】Vscode解决Python中制表符和空格混用导致的缩进问题
【Python】Vscode解决Python中制表符和空格混用导致的缩进问题 文章目录 【Python】Vscode解决Python中制表符和空格混用导致的缩进问题1. 问题来源2. 解决Reference 1. 问题来源 在python中使用缩进来进行代码块的分区,通常来说python的一个缩进包含4个空格&#…...
CocosCreator 面试题(十六)Cocos Creator 节点池的基本原理是什么?如何使用?
一、Cocos Creator 节点池的基本原理是什么? Cocos Creator 是一个游戏开发引擎,它提供了节点池(Node Pool)的功能,用于管理和重用游戏中的节点对象。节点池的基本原理如下: 创建初始节点:在游戏…...
VUE留言板
效果预览图 完整代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>作业</title><styl…...
【办公软件】电脑开机密码忘记了如何重置?
这个案例是家人的电脑,已经使用多年,又是有小孩操作过的,所以电脑密码根本不记得是什么了?那难道这台电脑就废了吗?需要重新装机吗?那里面的资料不是没有了? 为了解决以上问题,一般…...
PTA NeuDS-数据库题目集
一.判断题 1.在数据库中产生数据不一致的根本原因是冗余。T 解析:数据冗余是数据库中产生数据不一致的根本原因,因为当同一数据存储在多个位置时,如果其中一个位置的数据被修改,其他位置的数据就不一致了。因此,在数据…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
