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

django学习入门系列之第十点《A 案例: 员工管理系统10》

文章目录

  • 12 管理员操作
    • 12.4 密码加密
    • 12.5 获取对象(防止id错误--编辑界面等)
    • 12.6 编辑管理员
    • 12.7 重置密码
  • 往期回顾


12 管理员操作

12.4 密码加密

  • 密码不应该以明文的方式直接存储到数据库,应该加密才放进去

定义一个md5的方法(先创建一个文件夹)
在这里插入图片描述

  • 导入库
import hashlib
  • 标准md5加密的格式
    • 这样的坏处是,得到的密文是固定的
def MD5(data_string):obj = hashlib.md5()obj.update(data_string.encode('utf-8'))return obj.hexdigest()
  • 加盐
    • 就是在密码转换来的哈西值里加上一段默认或者系统随机生成的字符串
    • 相当于再次加密
# 导入库
# 会给你一个随机的字符串
from django.conf import settings
  • 总代码
import hashlib
from django.conf import settings# data_string 需要加密的字符串
def MD5(data_string):obj = hashlib.md5(settings.SECRET_KEY.encode('utf-8'))obj.update(data_string.encode('utf-8'))return obj.hexdigest()
class AdminModelForm(BootStrapModelForm):# 数据库定义两个字段,这里相当于再定义了一个字段confirm_password = forms.CharField(label="确认密码",widget=forms.PasswordInput,)class Meta:model = models.Adminfields = ["username", 'password']widgets = {"password": forms.PasswordInput,}# 加密MD5def clean_password(self):pwd = self.cleaned_data.get("password")return MD5(pwd)def clean_confirm_password(self):# 获取页面数据(两个密码的)pwd = self.cleaned_data.get("password")# 让确认密码也进行MD5加密# 这样让他们的密文进行比较# 这样存储到数据库之后也是密文了confirm = MD5(self.cleaned_data.get("confirm_password"))if confirm != pwd:raise ValidationError("密码不一致")# 这个是返回到数据库字段的值return confirm

在这里插入图片描述

12.5 获取对象(防止id错误–编辑界面等)

row_object = models.Admin.objects.filter(id=uid).first()if not row_object:return redirect('/admin/list')
def admin_edit(request, uid):"""编辑管理员"""row_object = models.Admin.objects.filter(id=uid).first()if not row_object:return redirect('/admin/list')title = "编辑管理员"return render(request, "add_model.html", {"title": title})

12.6 编辑管理员

  • 一般来讲都不会修改密码的

注意,我们只定义了一个字段,所以修改的时候只会修改这一个字段

# 重新定义一个样式用来编辑编辑界面
# 只允许你编辑用户名
class AdminEditModelForm(BootStrapModelForm):class Meta:model = models.Adminfields = ['username']
  • 编辑界面
def admin_edit(request, uid):"""编辑管理员"""row_object = models.Admin.objects.filter(id=uid).first()if not row_object:return redirect('/admin/list')title = "编辑管理员"if request.method == 'GET':# 显示默认值form = AdminEditModelForm(instance=row_object)return render(request, "add_model.html", {'form': form, "title": title})form = AdminEditModelForm(data=request.POST,  instance=row_object)if form.is_valid():form.save()return redirect("/admin/list/")return render(request, "add_model.html", {"form": form, "title": title})

12.7 重置密码

  • 添加被修改人

  • 本质还是使用id得到名字,然后再用占位符来进行占位

title = "重置密码 - {}".format(row_object.username)
def admin_reset(request, uid):"""重置密码"""row_object = models.Admin.objects.filter(id=uid).first()title = "重置密码 - {}".format(row_object.username)if not row_object:return redirect('/admin/list')return render(request, "add_model.html", {"title": title})
  • 重置密码
# 只允许你重置密码
# 用于重置密码
class AdminResetModelForm(BootStrapModelForm):confirm_password = forms.CharField(label="确认密码",widget=forms.PasswordInput,)class Meta:model = models.Adminfields = ['password']widgets = {"password": forms.PasswordInput,}def clean_password(self):pwd = self.cleaned_data.get("password")md5_pwd = MD5(pwd)# 重置拿到密码要去数据库那里把原先密码进行比对# self.instance.pk获取原先idexists = models.Admin.objects.filter(id=self.instance.pk, password=md5_pwd).exists()if exists:raise ValidationError("密码不能与之前密码一致")return MD5(pwd)def clean_confirm_password(self):# 获取页面数据(两个密码的)pwd = self.cleaned_data.get("password")# 让确认密码也进行MD5加密# 这样让他们的密文进行比较# 这样存储到数据库之后也是密文了confirm = MD5(self.cleaned_data.get("confirm_password"))if confirm != pwd:raise ValidationError("密码不一致")# 这个是返回到数据库字段的值return confirm
def admin_reset(request, uid):"""重置密码"""row_object = models.Admin.objects.filter(id=uid).first()title = "重置密码 - {}".format(row_object.username)if not row_object:return redirect('/admin/list')if request.method == 'GET':form = AdminResetModelForm()return render(request, "add_model.html", {'form': form, "title": title})form = AdminResetModelForm(data=request.POST, instance=row_object)if form.is_valid():form.save()return redirect("/admin/list/")return render(request, "add_model.html", {"form": form, "title": title})

往期回顾

1.【快速开发网站】
2.【浏览器能识别的标签1】
3.【浏览器能识别的标签2】
4.【浏览器能识别的标签3】
5.【浏览器能识别的标签4】
6.【案例1:用户注册】
7.【案例2:用户注册改进】
8.【快速了解 CSS】
9.【常用选择器概念讲解】
10.【CSS基础样式介绍1】
11.【CSS基础样式介绍2】
12.【CSS基础样式介绍3】
13.【CSS基础样式介绍3】
14.【案例 小米商城头标】
15.【案例 小米商城头标总结】
16.【案例 小米商城二级菜单】
17.【案例 商品推荐部分】
18.【伪类简单了解】
19.【position】
20.【案例 小米商城中app图标代码】
21.【边框及总结】
22.【BootSrap初了解】
23.【BootSrap的目录栏】
24.【BootSrap的栅格系统】
25.【案例 博客案例】
26.【案例 登录】
27.【案例 后台管理样例】
28.【图标】
29.【BootStrap依赖】
30.【javascript初了解】
31.【jJavaScript的变量】
32.【JavaScript的字符串类型】
33.【JavaScript的数组介绍】
34.【案例 动态数据】
35.【javascript 对象(字典)】
36.【案例 动态表格】
37.【Javascript的条件语句和函数】
38.【DOM初了解】
39.【DOM的事件了解】
40.【jQuery初了解】
41.【jQuery寻找标签】
42.【jQuery寻找标签2】
43.【jQuery寻找标签(间接寻找)】
44.【案例 菜单的切换】
45.【案例 只能打开一个菜单】
46.【jQuery 简单操作】
47.【案例 动态创建数据】
48.【案例 点击获取文本】
49.【案例 点击删除文本】
50.【案例 表格操作】
51.【案例 添加页面】
52.【初识MySQL】
53.【MySQL命令介绍一】
54.【MySQL命令介绍二】
55.【MySQL命令介绍三】
56.【案例:员工管理】
57.【案例 Flask+MySQL新增用户】
58.【案例 Flask+MySQL查询所有用户】
59.【初识 django】
60.【django的快速上手】
61.【django的模板语法】
62.【django的获取请求与响应】
63.【案例 用户登录】
64.【django中数据库操作】
65.【django中数据库操作–创建与删除表】
66.【django中数据库操作–操作表中的数据】
67.【案例 用户管理】
68.【A 案例: 员工管理系统1】
69.【A 案例: 员工管理系统2】
70.【A 案例: 员工管理系统3】
71.【A 案例: 员工管理系统4】
72.【A 案例: 员工管理系统5】
73.【A 案例: 员工管理系统6】
74.【A 案例: 员工管理系统7】
75.【A 案例: 员工管理系统8】
76.【A 案例: 员工管理系统9】

相关文章:

django学习入门系列之第十点《A 案例: 员工管理系统10》

文章目录 12 管理员操作12.4 密码加密12.5 获取对象(防止id错误--编辑界面等)12.6 编辑管理员12.7 重置密码 往期回顾 12 管理员操作 12.4 密码加密 密码不应该以明文的方式直接存储到数据库,应该加密才放进去 定义一个md5的方法&#xff…...

Unity实战案例全解析:PVZ 植物卡片状态分析

Siki学院2023的PVZ免费了,学一下也坏 卡片状态 卡片可以有三种状态: 1.阳光足够,(且cd好了可以种植) 2.阳光不够,(cd?好了:没好 (三目运算符)&…...

判断变量是否为有限数字(非无穷大或NaN)math.isfinite() 判断变量是否为无穷大(正无穷大或负无穷大)math.isinf()

【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 判断变量是否为有限数字(非无穷大或NaN) math.isfinite() 判断变量是否为无穷大(正无穷大或负无穷大) math.isinf() 请问关于以下代码表述错误…...

idea使用阿里云服务器运行jar包

说明&#xff1a;因为我用的阿里云服务器不是自己的&#xff0c;所以一些具体的操作可能不太全面。看到一个很完整的教程&#xff0c;供参考。 0. 打包项目 这里使用的是maven打包。 在pom.xml中添加以下模块。 <build><plugins><plugin><groupId>org…...

解决nginx代理SSE接口的响应没有流式返回

目录 现象原来的nginx配置解决 现象 前后端分离的项目&#xff0c;前端访问被nginx反向代理的后端SSE接口&#xff0c;预期是流式返回&#xff0c;但经常是很久不响应&#xff0c;一响应全部结果一下子都返回了。查看后端项目的日志&#xff0c;响应其实是流式产生的。推测是n…...

11 - TCPClient实验

在上一个章节的UDP通信测试中&#xff0c;尽管通信的实现过程相对简洁&#xff0c;但出现了通信数据丢包的问题。因此&#xff0c;本章节将基于之前建立的WIFI网络连接&#xff0c;构建一个基础的TCPClient连接机制。我们利用网络调试助手工具来发送数据&#xff0c;测试网络通…...

React框架搭建,看这一篇就够了,看完你会感谢我

传统搭建框架的方式 在2024年以前&#xff0c;我们构建框架基本上采用官方脚手架&#xff0c;但是官方脚手架其实大概率都不符合我们的项目要求&#xff0c;搭建完了以后往往需要再继续集成一些第三方的包。这时候又会碰到一些版本冲突&#xff0c;配置教程等&#xff0c;往往…...

【rust】rust条件编译

在c语言中&#xff0c;条件编译是一个非常好用的功能&#xff0c;那么rust中如何实现条件编译呢? rust的条件编译需要两个部分&#xff0c;一个是fratures&#xff0c;另一个是cfg。Cargo feature是一个非常强大的功能&#xff0c;可以提供条件编译和可选依赖项的高级特性&…...

一键文本提示实现图像对象高质量剪切与透明背景生成

按照提示词裁剪 按照边框裁剪 要实现您描述的功能,即通过一个文本提示就能自动从图片中切割出指定的对象并生成一个带有透明背景的新图像,这需要一个结合了先进的计算机视觉技术和自然语言处理能力的系统。这样的系统可以理解输入的文本指令,并将其转化为对图像内容的精确分…...

游戏客服精华回复快捷语大全

以黑神话悟空为代表的国内的游戏行业&#xff0c;最近发展非常迅猛&#xff0c;大量游戏玩家需要足够的游戏客服支持&#xff0c;这里整理了游戏客服精华回复快捷语&#xff0c;涵盖了接待客户&#xff0c;游戏级数&#xff0c;游戏外挂&#xff0c;游戏要求&#xff0c;游戏特…...

国内版Microsoft Teams 基础版部署方案

目录 前言Microsoft Teams简介部署前的准备 环境需求账户和许可网络要求部署步骤 初步配置和设置安装Microsoft Teams客户端Teams管理中心配置用户管理 用户添加与分配角色与权限管理通讯与协作 团队和频道管理即时消息和会议功能文件共享与协作安全性与合规性 数据保护措施合规…...

计算机网络 ---- OSI参考模型TCP/IP模型

目录 一、OSI参考模型 1.1 学习路线 1.2 OSI参考模型和TCP/IP模型 1.3 具体设备与具体层次对应关系 1.3.1 物理层 1.3.2 数据链路层 1.3.3 网络层 1.3.4 传输层 1.3.5 会话层、表示层、应用层 1.4 各层次数据传输单位 二、TCP/IP模型 2.1 学习路线 2.2 TCP/I…...

在Windows环境下部署Java的Web项目集成工具的整体流程和详细步骤

好的&#xff0c;以下是一份关于“Windows环境下部署Java的Web项目集成工具”的手把手操作流程&#xff0c;由浅入深&#xff0c;先整体后分部&#xff1a; 一、引言 在现代软件开发中&#xff0c;Java作为一种广泛应用的编程语言&#xff0c;其Web项目开发尤为常见。为了提高…...

9.18作业

提示并输入一个字符串&#xff0c;统计该字符串中字母、数字、空格、其他字符的个数并输出 代码展示 #include <iostream>using namespace std;int main() {string str;int countc 0; // 字母计数int countn 0; // 数字计数int count 0; // 空格计数int counto 0;…...

【算法】滑动窗口—最小覆盖子串

题目 ”最小覆盖子串“问题&#xff0c;难度为Hard&#xff0c;题目如下&#xff1a; 给你两个字符串 S 和 T&#xff0c;请你在 S 中找到包含 T 中全部字母的最短子串。如果 S 中没有这样一个子串&#xff0c;则算法返回空串&#xff0c;如果存在这样一个子串&#xff0c;则可…...

“Fast-forward“ in git-pull result

当你执行 git pull 并且结果显示 Fast-forward 时&#xff0c;这意味着你的本地分支可以直接快进到远程分支的最新提交&#xff0c;没有任何冲突或者需要合并的内容。具体来说&#xff0c;Fast-forward 是一种合并方式&#xff0c;它的特点是将当前分支的指针直接移动到远程分支…...

Oracle(133)如何创建表空间(Tablespace)?

在Oracle数据库中&#xff0c;表空间&#xff08;Tablespace&#xff09;是存储数据的逻辑单位&#xff0c;它由一个或多个数据文件组成。表空间是数据库数据管理的基本结构&#xff0c;了解如何创建表空间对于数据库管理员至关重要。 创建表空间的基本语法 创建表空间的基本…...

Linux中权限和指令

&#x1f4a5;1、Linux基本指令 1.1 mv 指令 mv指令是move的缩写&#xff0c;用来移动或重命名文件、目录&#xff0c;经常用来备份文件或目录。 mv old_name new_name&#xff1a; 重命名文件或目录mv file /path/to/directory&#xff1a; 移动文件到指定目录 roothcss-ecs…...

本地镜像发布到阿里云

本地镜像发布到阿里云 登录阿里云容器镜像服务配置 Docker 登录阿里云容器镜像服务标记你的 Docker 镜像推送镜像到阿里云验证使用阿里云镜像注意事项 将 Docker 本地镜像发布到阿里云&#xff08;Alibaba Cloud&#xff09;容器镜像服务&#xff08;Container Registry&#x…...

【Linux】【Vim】Vim 基础

Vim/Gvim 基础 文本编辑基础编辑操作符命令和位移改变文本重复改动Visual 模式移动文本(复制、粘贴)文本对象替换模式 光标移动以 word 为单位移动行首和行尾行内指定单字符移动到匹配的括号光标移动到指定行滚屏简单查找 /string标记 分屏vimdiff 文本编辑 基础编辑 Normal 模…...

计算机人工智能前沿进展-大语言模型方向-2024-09-18

计算机人工智能前沿进展-大语言模型方向-2024-09-18 1. The Application of Large Language Models in Primary Healthcare Services and the Challenges W YAN, J HU, H ZENG, M LIU, W LIANG - Chinese General Practice, 2024 人工智能大语言模型在基层医疗卫生服务中的应…...

ubuntu24安装vivado24(安装并解决若干错误)

目录 安装方法&#xff1a;问题1&#xff1a;解决办法&#xff1a; 问题2&#xff1a;解决方法&#xff1a; 安装完成&#xff1a; 安装方法&#xff1a; 注意&#xff1a;内存最好预留80G空闲的。 安装好大小&#xff1a; 安装依赖库&#xff1a; sudo apt-get update sud…...

CSS实现文本溢出省略号或完整显示

目录 前言1. 省略号2. 完整展示3. Demo 前言 文本内容超出容器宽度的问题&#xff0c;为了保持页面布局的整洁&#xff0c;通常会使用省略号来隐藏多余的内容 一共有两种方式&#xff1a; 设定省略号完整展示 1. 省略号 文本溢出时显示省略号 .item-value {flex-basis: 7…...

three.js PropertyBinding和PropertyMixer

PropertyBinding 对场景图中某一真实属性的引用&#xff0c;内部使用。 构造器 PropertyBinding( rootNode : Object3D, path, parsedPath ) -- rootNode: -- path -- parsedPath (可选) 属性 # .path : Number # .parsedPath : Number # .node : Number # .rootNode …...

ssh远程连接try1账号切换tips

1&#xff0c;创建拥有sudo权限的用户&#xff1a; 在root下 sudo adduser bio sudo vim /etc/sudoers //修改添加如下&#xff1a; bio ALL(ALL) ALL //bio用户就拥有了root权限参考&#xff1a;https://github.com/isLishude/blog/issues/70 2&#xff0c;修改ssh配置 …...

C++之第十二课

课程列表 哎呀呀&#xff0c;失踪人口回归了&#xff01;&#xff08;前段时间跑去B站了&#xff0c;久等了&#xff09; 今天来讲——数组 有一道题是这样的&#xff1a; 有n个数&#xff0c;请输出其中最大的数。 原来我们就要&#xff1a; int a,b,c... 但是——数组…...

Linux硬连接、软连接和复制的区别

‌硬连接、软连接和复制在Linux系统中的主要区别体现在以下三点&#xff1a; 文件链接的方式文件独立性文件系统的操作上。‌ 一、硬连接 1. 硬连接是通过ln命令创建的&#xff0c;它为文件创建别名&#xff0c;与源文件共享同一inode号码&#xff0c;因此硬连接和源文件实际…...

基于STM32的无人小车自主避障系统设计

文章目录 前言资料获取设计介绍功能介绍设计程序具体实现截图参考文献设计获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师&#xff0c;一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设…...

杂牌鼠标侧键设置

X-Mouse Button Control修改侧键基本功能介绍-CSDN博客 下载链接 【X-Mouse汉化版】X-Mouse中文版 v2.19.2 绿色版&#xff08;支持Win10&#xff09;-开心电玩 (kxdw.com)...

Android WebView H5 Hybrid 混和开发

对于故乡&#xff0c;我忽然有了新的理解&#xff1a;人的故乡&#xff0c;并不止于一块特定的土地&#xff0c;而是一种辽阔无比的心情&#xff0c;不受空间和时间的限制&#xff1b;这心情一经唤起&#xff0c;就是你已经回到了故乡。——《记忆与印象》 前言 移动互联网发展…...