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=passwordfrom 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
相关文章:
Django的Auth模块
Auth模块 我们在创建好一个Django项目后执行数据库迁移命令会自动生成很多表 其中有auth_user等表 Django在启动之后就可以直接访问admin路由,需要输入用户名和密码,数据参考的就是auth_user表,并且必须是管理员才能进入 依赖于a…...
敏捷开发方法
理解: 极限编程(XP):敏捷开发的典型方法之一,是一种轻量级(敏捷)、高效,低风险、柔性、可预测的、科学的软件开发方法,它由价值观、原则、实践和行为4个部分组成。其中4大…...
vue 前端实现login页登陆 验证码
实现效果 // template <el-form :model"loginForm" :rules"fieldRules" ref"loginForm" label-position"left" label-width"0px" class"login-container"><span class"tool-bar"></sp…...
python 涉及opencv mediapipe知识,眨眼计数 供初学者参考
基本思路 我们知道正面侦测到人脸时,任意一只眼睛水平方向上的两个特征点构成水平距离,上下两个特征点构成垂直距离 当头像靠近或者远离摄像头时,垂直距离与水平距离的比值基本恒定 根据这一思路 当闭眼时 垂直距离变小 比值固定小于某一个…...
HTTP 和 HTTPS的区别
一、HTTP 1.明文传输,不安全 2.默认端口号:80 3.TCP三次握手即可 二、HTTPS 1.加密传输,更安全(在HTTP层与TCP层之间加上了SSL/TTL安全协议) SSL和TTL是在不同时期的两种叫法,含义相同。 2.默认端口号:443 3.TCP三…...
从零开始训练一个ChatGPT大模型(低资源,1B3)
macrogpt-prertrain 大模型全量预训练(1b3), 多卡deepspeed/单卡adafactor 源码地址:https://github.com/yongzhuo/MacroGPT-Pretrain.git 踩坑 1. 数据类型fp16不太行, 很容易就Nan了, 最好是fp32, tf32, 2. 单卡如果显存不够, 可以用优化器adafactor, 3. 如果…...
从文字到使用,一文读懂Kafka服务使用
🏆作者简介,普修罗双战士,一直追求不断学习和成长,在技术的道路上持续探索和实践。 🏆多年互联网行业从业经验,历任核心研发工程师,项目技术负责人。 🎉欢迎 👍点赞✍评论…...
什么是https加密协议?
前言: HTTPS(全称:Hypertext Transfer Protocol Secure) 是一个安全通信通道,它基于HTTP开发用于在客户计算机和服务器之间交换信息。它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版&…...
0012Java程序设计-ssm医院预约挂号及排队叫号系统
文章目录 **摘** **要**目 录系统实现5.2后端功能模块5.2.1管理员功能模块5.2.2医生功能模块 开发环境 摘 要 网络的广泛应用给生活带来了十分的便利。所以把医院预约挂号及排队叫号管理与现在网络相结合,利用java技术建设医院预约挂号及排队叫号系统,实…...
PaddleClas学习3——使用PPLCNet模型对车辆朝向进行识别(c++)
使用PPLCNet模型对车辆朝向进行识别 1 准备环境2 准备模型2.1 模型导出2.2 修改配置文件3 编译3.1 使用CMake生成项目文件3.2 编译3.3 执行3.4 添加后处理程序3.4.1 postprocess.h3.4.2 postprocess.cpp3.4.3 在cls.h中添加函数声明3.4.4 在cls.cpp中添加函数定义3.4.5 在main.…...
学习记录---kubernetes中备份和恢复etcd
一、简介 ETCD是kubernetes的重要组成部分,它主要用于存储kubernetes的所有元数据,我们在kubernetes中的所有资源(node、pod、deployment、service等),如果该组件出现问题,则可能会导致kubernetes无法使用、资源丢失等情况。因此…...
使用单例模式+观察者模式实现参数配置实时更新
使用vector存储观察者列表 #include <iostream> #include <vector> #include <functional> #include <algorithm>// 配置参数结构体 struct MyConfigStruct {int parameter1;std::string parameter2; };class Config { public:using Observer std::f…...
区块链实验室(28) - 拜占庭节点劫持区块链仿真
在以前的FISCO环境中仿真拜占庭节点攻击区块链网络。该环境共有100个节点,采用PBFT作为共识机制,节点编号分别为:Node0,Node,… ,Node99。这100个节点的前2010区块完全相同,自区块2011开始分叉。…...
聊聊AsyncHttpClient的ChannelPool
序 本文主要研究一下AsyncHttpClient的ChannelPool ChannelPool org/asynchttpclient/channel/ChannelPool.java public interface ChannelPool {/*** Add a channel to the pool** param channel an I/O channel* param partitionKey a key used to retrieve the cac…...
[MySQL] MySQL复合查询(多表查询、子查询)
前面我们学习了MySQL简单的单表查询。但是我们发现,在很多情况下单表查询并不能很好的满足我们的查询需求。本篇文章会重点讲解MySQL中的多表查询、子查询和一些复杂查询。希望本篇文章会对你有所帮助。 文章目录 一、基本查询回顾 二、多表查询 2、1 笛卡尔积 2、2…...
[架构之路-256]:目标系统 - 设计方法 - 软件工程 - 软件设计 - 架构设计 - 软件系统不同层次的复用与软件系统向越来越复杂的方向聚合
目录 前言: 一、CPU寄存器级的复用:CPU寄存器 二、指令级复用:二进制指令 三、过程级复用:汇编语言 四、函数级复用:C语言 五、对象级复用:C, Java, Python 六、组件级复用 七、服务级复用 八、微…...
C++初学教程三
目录 一、运算符 一、自增自减运算符 二、位运算符 三、关系运算符...
雷达点云数据.pcd格式转.bin格式
雷达点云数据.pcd格式转.bin格式 注意,方法1原则上可行,但是本人没整好pypcd的环境 方法2是绝对可以的。 方法1 1 源码如下: def pcb2bin1(): # save as bin formatimport os# import pypcdfrom pypcd import pypcdimport numpy as np…...
Fiddler抓包测试
模拟弱网测试 操作:一、Rules - Customize Rules (快捷键CtrlR)弹出编辑器 二、接着CtrlF查找m_SimulateModem标志位 三、默认上传300ms,下载150ms 四、更改后,继续Rules - Performances - Simulate Modem Speeds勾上 …...
视频处理关键知识
1 引言 视频技术发展到现在已经有100多年的历史,虽然比照相技术历史时间短,但在过去很长一段时间之内都是最重要的媒体。由于互联网在新世纪的崛起,使得传统的媒体技术有了更好的发展平台,应运而生了新的多媒体技术。而多媒体技术…...
面试官是算法出身,感觉没有问的很难?揭秘AI大模型面试高频题及应对策略!
面试官是算法出身,感觉没有问的很难第一个AI Agent系统是多Agent系统还是单Agent系统?Think-Execute循环机制的prompt工程设计是你自己写的吗?能简单说一下Think-Executor的prompt是怎么设计的吗?系统用的基座模型是什么ÿ…...
从字节码到机器码的终极跨越,Python AOT编译面试核心链路全解析,含LLVM IR生成、符号剥离与冷启动优化
第一章:Python 原生 AOT 编译方案 2026 面试题汇总Python 原生 AOT(Ahead-of-Time)编译在 2026 年已进入工程落地深水区,CPython 官方 3.14 版本正式集成 pyc-compile --aot 工具链,同时第三方方案如 nuitka 15.x、cod…...
为机械臂视觉抓取做准备:在Ubuntu 18.04上配置ROS+YOLOv5运行环境的完整避坑清单
为机械臂视觉抓取做准备:在Ubuntu 18.04上配置ROSYOLOv5运行环境的完整避坑清单 当机械臂遇上YOLOv5,视觉抓取的能力边界将被重新定义。但在这之前,开发者需要跨越环境配置的"死亡之谷"——特别是当Ubuntu 18.04、ROS Melodic和PyT…...
用Neural Renderer和PyTorch搞定3D车辆模型渲染:从.obj文件到Carla数据集实战
3D车辆模型渲染实战:Neural Renderer与Carla数据集深度整合指南 在自动驾驶和计算机视觉领域,逼真的3D车辆模型渲染技术正成为算法开发和测试的关键环节。传统渲染方法往往难以平衡效率与真实感,而基于神经网络的渲染技术为解决这一难题提供了…...
深入解析GD32的I/O重映射:从部分映射到完全映射的实战指南
1. 认识GD32的I/O重映射功能 第一次接触GD32的I/O重映射时,我也是一头雾水。简单来说,这个功能允许我们把某个外设的引脚从默认位置"搬家"到其他引脚上。想象一下你家的电路插座,原本电视机插在客厅的插座上,现在通过延…...
LeetCode 238. Product of Array Except Self 题解
LeetCode 238. Product of Array Except Self 题解 题目描述 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整…...
Vue3-DateTime-Picker:如何让Vue 3应用的时间选择变得简单又优雅?
Vue3-DateTime-Picker:如何让Vue 3应用的时间选择变得简单又优雅? 【免费下载链接】vue3-date-time-picker Datepicker component for Vue 3 项目地址: https://gitcode.com/gh_mirrors/vu/vue3-date-time-picker 你是否曾经在开发Vue应用时&…...
NSLogger高级过滤技巧:正则表达式实战指南
NSLogger高级过滤技巧:正则表达式实战指南 【免费下载链接】NSLogger A modern, flexible logging tool 项目地址: https://gitcode.com/gh_mirrors/ns/NSLogger NSLogger是一款现代、灵活的日志记录工具,专为macOS、iOS和Android平台设计。它取代…...
Spring Boot 与 Prometheus 监控实战
Spring Boot 与 Prometheus 监控实战 引言 大家好,今天想和大家聊聊 Spring Boot 与 Prometheus 的监控实践。作为一名 Java 架构师,我深知监控对于生产环境的重要性。Prometheus 作为云原生监控的事实标准,与 Spring Boot 的集成非常顺畅。让…...
GuwenBERT:古文自然语言处理的技术革新
GuwenBERT:古文自然语言处理的技术革新 【免费下载链接】guwenbert GuwenBERT: 古文预训练语言模型(古文BERT) A Pre-trained Language Model for Classical Chinese (Literary Chinese) 项目地址: https://gitcode.com/gh_mirrors/gu/guwe…...
