Django的Auth模块

Auth模块

我们在创建好一个Django项目后执行数据库迁移命令会自动生成很多表        

其中有auth_user等表

Django在启动之后就可以直接访问admin路由,需要输入用户名和密码,数据参考的就是auth_user表,并且必须是管理员才能进入

依赖于auth_user表完成用户相关的所有功能

创建超级用户(管理员)

python manage.py createsuperuser
 

比对密码和用户名是否正确

括号内必须同时传入用户名和密码

user_obj = auth.authenticate(request, username=username, password=password)

保存用户状态

auth.login(request, user_obj)  # 类似于request.session[key]=user_obj
# 只要执行了该方法,你就可以在任何地方通过request.user获取到当前登录的对象

判断用户当前是否登录

request.user.is_authenticated()

获取当前登录用户

request.user

校验用户是否登录装饰器

from django.contrib.auth.decorators import login_required
@login_required(login_url='/login/')  # 局部配置:用户没有登录跳转到login_url后面指定的网址
#全局配置
LOGIN_URL='/login/'

 比对密码

request.user.check_password(old_password)  # 返回bool

修改密码

# 设置新密码
request.user.set_password(new_password)  # 仅仅修改对象的属性
# 操作数据库
request.user.save()

注销

auth.logout(request)

注册

User.objects.create_user(username=username,password=password
from django.contrib.auth.models import User

urls.py


from django.contrib import admin
from django.urls import path
from app01 import views
urlpatterns = [path('admin/', admin.site.urls),#登录功能path('login/', views.login),#判断用户是否登录path('home/', views.home),#修改密码path('set_password/',views.set_password),#注销功能path('logout/',views.logout),#注册功能path('reg/',views.reg)
]

views.py

from django.shortcuts import render, redirect, HttpResponse
from django.contrib import auth# 使用auth模块要用就用全套
def login(request):if request.method == 'POST':username = request.POST.get('username')password = request.POST.get('password')# 去用户表中校验数据# 1.表如何获取# 2.密码如何比对user_obj = auth.authenticate(request, username=username, password=password)if user_obj:# 保存用户状态auth.login(request, user_obj)  # 类似于request.session[key]=user_obj# 只要执行了该方法,你就可以在任何地方通过request.user获取到当前登录的对象return redirect('/home/')'''1.自动查找auth_user标签2.自动给密码加密再比对该方法注意事项括号内必须同时传入用户名和密码不能只传用户名'''return render(request, 'login.html')from django.contrib.auth.decorators import login_required'''
1.如果全局也配置了,优先级 局部>全局
2.全局配置不需重复写代码,但是跳转单一。局部配置好处在于不同的视图函数在用户没有登录的情况下可以跳到不同页面
'''@login_required(login_url='/login/')  # 局部配置:用户没有登录跳转到login_url后面指定的网址
def home(request):print(request.user)  # 用户对象    如果django_session表中没有数据就拿到AnonymousUser匿名用户# print(request.user.is_authenticated()) #匿名用户返回False,用来判断当前用户是否登录# 自动去django_session表中查看用户对象给你封装到request.user中return HttpResponse('ok')@login_required(login_url='/login/')
def set_password(request):if request.method == 'POST':username = request.POST.get('username')old_password = request.POST.get('old_password')new_password = request.POST.get('new_password')# 对比新旧密码是否一致if old_password == new_password:# 校验老密码is_right = request.user.check_password(old_password)  # 返回boolif is_right:# 设置新密码request.user.set_password(new_password)  # 仅仅修改对象的属性# 操作数据库request.user.save()return render(request, 'set_password.html', locals())
@login_required
def logout(request):auth.logout(request)return redirect('/login/')
from django.contrib.auth.models import User
def reg(request):if request.method=='POST':username = request.POST.get('username')password = request.POST.get('password')#操作auth_user表写入数据#User.objects.create() 不能用create,密码没有加密处理#创建普通用户User.objects.create_user(username=username,password=password)return render(request,'reg.html')

auth模块表扩展       

models.py  

from django.db import models
from django.contrib.auth.models import User,AbstractUser
# Create your models here.
class UserInfo(AbstractUser):'''如果继承了AbstractUser那么在执行数据库迁移命令的时候auth_user就不会被创建出来了而UserInfo表中会出现auth_user所有的字段 外加自己扩展的字段这样你能直接点击你自己的表更加快速的完成操作和扩展前提:1.在继承之前没有执行过数据库迁移命令auth_user没有被创建,如果当前库已经创建了那么就重新换个库2.继承的类里面不要覆盖AbstractUser里面的字段名表里面所有的字段都不要动,只要扩展字段即可3.需要在配置文件中告诉Django你要用UserInfo代替auth_userAUTH_USER_MODEL='app01.UserInfo'应用名.表名'''phone=models.BigIntegerField()
#替换了auth_user表,auth模块还是正常使用,参考的表页从原来的auth_user变成了UserInfo

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/208484.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

flink1.12.4消费kafka 报错 The coordinator is not available

报错 You should retry committing the latest consumed offsets. Caused by: org.apache.kafka.common.errors.CoordinatorNotAvailableException: The coordinator is not available. 但是任务还在正常跑. 开源bug [FLINK-28060] Kafka Commit on checkpointing fails rep…

12.8 作业 C++

使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin",密码是否为…

一篇文章熟练掌握 Axios

Axios是什么 Axios是一个基于Promise的网络请求库,作用于node.js和浏览器中。在服务端使用原生node.js http模块,在客户端使用XMLHttpRequest。是基于Promise对Ajax的封装。 Axios的特性 从浏览器创建XMLHttpRequests从node.js创建http请求支持Promis…

基于OpenCV的人脸识别系统案例

基于OpenCV的人脸识别系统案例 人脸识别简介代码实现案例应用情况 下面将介绍如何使用Python和OpenCV库构建一个简单但强大的人脸识别系统。人脸识别是计算机视觉领域的一个重要应用,具有广泛的实际用途,从安全门禁到娱乐应用。 人脸识别简介 人脸识别是…

MySQL - 表达式With as 语句的使用及练习

目录 8.1 WITH AS 的含义 8.2 WITH AS语法的基本结构如下: 8.3 练习题1 8.4 牛客练习题 8.1 WITH AS 的含义 WITH AS 语法是MySQL中的一种临时结果集,它可以在SELECT、INSERT、UPDATE或DELETE语句中使用。通过使用WITH AS语句,可以将一个查…

量子芯片技术:未来的计算革命

量子芯片技术:未来的计算革命 一、引言 随着科技的不断发展,人类正在进入一个全新的技术时代,即量子时代。量子芯片技术作为这个时代的重要代表,正逐渐改变我们对计算和信息处理的理解。本文将深入探讨量子芯片技术的基本原理、…

Navicat 技术指引 | 适用于 GaussDB 分布式的服务器对象的创建/设计

Navicat Premium(16.3.3 Windows版或以上)正式支持 GaussDB 分布式数据库。GaussDB分布式模式更适合对系统可用性和数据处理能力要求较高的场景。Navicat 工具不仅提供可视化数据查看和编辑功能,还提供强大的高阶功能(如模型、结构…

Java入门 EditPlus的安装与配置讲解

写Java程序不建议使用EditPlus,首选idea社区版,其次是vscode, 然后是eclipse 。editplus说实话排不上号。 但既然小伙伴想了解一下怎么配置,这里就简单说一下。 下载 首先是jdk,jdk是Java开发和运行的基础&#xff…

EVT_WDF_DEVICE_PREPARE_HARDWARE API

NTSTATUS EVT_WDF_DEVICE_PREPARE_HARDWARE(__inWDFDEVICE Device,__inWDFCMRESLIST ResourcesRaw,__inWDFCMRESLIST ResourcesTranslated); 上面API中ResourcesRaw和ResourcesTranslated类型相同,那他们的区别是啥? 答: EVT_WDF_DEVICE_P…

【前端设计模式】之访问者模式

引言 在前端开发中,我们经常需要处理复杂的对象结构和数据集合。这时候,访问者模式就能派上用场了。访问者模式允许我们将操作和数据结构分离开来,从而实现对复杂对象结构的优雅处理。 访问者模式的特性 访问者模式具有以下特性&#xff1…

iview Table实现跨页勾选记忆功能以及利用ES6的Map数据结构实现根据id进行对象数组的去重

因为iview Table组件的勾选是选中当前页的所有数据,当我们切到别的页面时,会发送请求给后端,这个时候就会刷新我们之前页码已经选中的数据。现在有个需求就是,在我们选择不同页码的数据勾选中之后,实现跨页勾选记忆功能,就是说已经打钩了的数据,不管切到哪一页它都是打钩…

AI聊天专题报告:ChatGPT全景图聊聊技术产品和未来

今天分享的AI系列深度研究报告:《AI聊天专题报告:ChatGPT全景图聊聊技术产品和未来》。 (报告出品方:LanguageX) 报告共计:22页 争论:ChatGPT算不算技术革命 回应吴军老师“ChatGPT不算新技术…

Navicat 技术指引 | 适用于 GaussDB 分布式的模型功能

Navicat Premium(16.3.3 Windows 版或以上)正式支持 GaussDB 分布式数据库。GaussDB 分布式模式更适合对系统可用性和数据处理能力要求较高的场景。Navicat 工具不仅提供可视化数据查看和编辑功能,还提供强大的高阶功能(如模型、结…

Dubbo学习

一、整体架构设计分层 接口服务层(Service):该层与业务逻辑相关,根据provider和consumer的业务设计对应的接口和实现 配置层(Config):对外配置接口,以ServiceConfig和ReferenceConfig为中心 服…

cache 2.单机并发缓存

0.对原教程的一些见解 个人认为原教程中两点知识的引入不够友好。 首先是只读数据结构 ByteView 的引入使用是有点迷茫的,可能不能很好理解为什么需要ByteView。 第二是主体结构 Group的引入也疑惑。其实要是熟悉groupcache,那对结构Group的使用是清晰…

线性回归与逻辑回归:深入解析机器学习的基石模型

目录 一、线性回归 二、逻辑回归 逻辑回归算法和 KNN 算法的区别 分类算法评价维度

QT作业2

使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin",密码是否为…

Navicat 技术指引 | 适用于 GaussDB 分布式的数据查看器

Navicat Premium(16.3.3 Windows 版或以上)正式支持 GaussDB 分布式数据库。GaussDB 分布式模式更适合对系统可用性和数据处理能力要求较高的场景。Navicat 工具不仅提供可视化数据查看和编辑功能,还提供强大的高阶功能(如模型、结…

微服务学习:Nacos微服务架构中的服务注册、服务发现和动态配置Nacos下载

Nacos的主要用途包括: 服务注册与发现:Nacos提供了服务注册和发现的功能,服务提供者可以将自己的服务注册到Nacos服务器上,服务消费者则可以通过Nacos来发现可用的服务实例,从而实现服务调用。 动态配置管理&#xff…

聚观早报 |华为畅享 70正式开售;梦饷科技双12玩法

【聚观365】12月8日消息 华为畅享 70正式开售 梦饷科技双12玩法 华为Mate X5应对火海挑战 谷歌发布AI模型Gemini 字节跳动开启新一轮回购 华为畅享 70正式开售 精致外观与创新科技兼具的华为畅享 70正式开售,1199元起搭载6000mAh超大电池,带来超强…