◢Django md5加密与中间件middleware

utils文件夹是重新建立的(与migrations同级),该文件夹下主要存放工具,就像static文件夹下只存放静态文件一样

加密

在utils文件夹下建立encrypt.py文件

from django.conf import settings
import hashlib
def md5(data_string):#md5加密obj=hashlib.md5(settings.SECRET_KEY.encode('utf-8'))#加盐obj.update(data_string.encode('utf-8'))return obj.hexdigest()

在需要使用使用的地方进行导入并调用 【按照自己的路径补充导入,放进utils还是views均可】

from django import formsclass Bootstrap:bootstrap_exclude_fields = []#排除不加样式的input框def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)for name, field in self.fields.items():if name in self.bootstrap_exclude_fields:continuefield.widget.attrs['class'] = 'form-control'  # 添加属性field.widget.attrs['placeholder'] = field.label  # 添加属性class BootstrapModelForm(Bootstrap,forms.ModelForm):#ModelForm组件使用passclass BootstrapForm(Bootstrap,forms.Form):#Form组件使用pass
class AdminModelForm(BootstrapModelForm):#不用写__init__方法twopwd = forms.CharField(label='确认密码',widget=forms.PasswordInput(render_value=True))class Meta:model = Adminfields = ['username','password']widgets={'password':forms.PasswordInput(render_value=True)}def clean_password(self):pwd=self.cleaned_data.get('password')#第一次密码进行加密return md5(pwd)def clean_twopwd(self):#写确认密码的函数print(self.cleaned_data)pwd=self.cleaned_data.get('password')pwd2=md5(self.cleaned_data.get('twopwd'))#第二次密码进行加密if pwd != pwd2:raise ValidationError("密码不一致")return pwd2

在views中

def superadd(request):if request.method == 'GET':fm=AdminModelForm()return render(request,'sadd.html', {'form':fm,})fm=AdminModelForm(data=request.POST)if fm.is_valid():print(fm.cleaned_data)fm.save()return redirect('/super/')return render(request,'sadd.html',{'form':fm})

在ModelForm中对要判断的数据进行加密return md5(pwd)

加密数据:{'username': 'comp', 'password': 'c11fb0003e3a4829b6237df02a22a5d6', 'twopwd': 'c11fb0003e3a4829b6237df02a22a5d6'}

数据库也随之存储加密数据【比较的时候将未加密的密码进行加密】

中间件middleware

【以下是一些常见的Django中间件:

  1. AuthenticationMiddleware:用于处理用户身份验证和会话管理。它会在请求到达视图之前对用户进行身份验证,并根据需要创建会话。

  2. SessionMiddleware:用于支持会话功能。它会为每个用户维护一个唯一的会话,存储用户的会话数据,例如登录状态、购物车内容等。

  3. CsrfViewMiddleware:用于防止跨站请求伪造(CSRF)攻击。它会在每个POST请求中生成和验证CSRF令牌,确保请求来自合法的来源。

  4. CommonMiddleware:提供了一些通用的HTTP处理功能,例如处理URL重写、压缩响应、设置缓存控制头等。

  5. GZipMiddleware:用于在服务器上对响应进行压缩,以减少网络传输的数据量,提高性能。

  6. LocaleMiddleware:用于处理多语言支持。它会根据浏览器语言设置选择合适的语言,并将其应用于请求处理过程中。

  7. MessageMiddleware:提供了一种向用户显示临时消息的机制。例如,成功消息、错误消息等。】

建立文件夹middleware【app下级】,在该文件夹中建立auth.py文件,写入类M1M2M3...

  1. process_request() 方法:该方法会在每个请求到达服务器之前被调用。

  2. process_response() 方法:该方法会在每个请求得到响应之后被调用。在该方法中,我们可以对响应进行处理,例如添加 HTTP 头部、修改响应内容等。

将M1路径加到settings.py中的middleware中【注册中间件】 

确保 M1 中间件的顺序在 AuthenticationMiddleware(身份验证中间件)之后,以确保身份验证逻辑已经完成

接下来所有的def执行前都会经过M1(中间件),栈的操作 

判断session【有session可进入项目网页,没有session回到登陆注册页面进行登陆注册】

from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import redirect,HttpResponse
class M1(MiddlewareMixin):'''中间件1'''def process_request(self,request):'''排除不需要验证的页面 request.path_info 获取url'''if request.path_info in ["/login/"]:return#若能读取到session值,则已登录info_dict=request.session.get('info')if info_dict:#自然向后走就可以returnreturn redirect('/login/')def process_response(self,request,response):print('M1', '走了')return response

若没有session则直接跳转至login页面,速度很快

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

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

相关文章

Airtest1.2.7新增断言API介绍

1. 前言 1.2.7版本的Airtest中,一个很重要的功能是 新增了非常丰富的断言API ,今天我们就来详细看一下Airtest都给我们提供了哪些断言语句。 2. 旧版Airtest提供的断言语句 先回顾下,旧版Airtest一直以来,都只给我们提供了2种断言…

Samtec信号完整性 这家连接器的设计很优秀!

【Samtec技术研发:信号完整性设计】 1. 什么是信号完整性? 信号完整性需要在整个系统和组件设计过程中加以考虑。与过去不同的是,互连不再是事后考虑的问题。随着上升时间的缩短和时钟频率的提高,曾经被认为是电气透明的连接器和…

阿里云经济型、通用算力型、计算型、通用型、内存型云服务器最新活动报价

阿里云作为国内领先的云计算服务提供商,提供了多种规格的云服务器供用户选择。为了满足不同用户的需求,阿里云推出了经济型、通用算力型、计算型、通用型和内存型等不同类型的云服务器。下面将详细介绍这些云服务器的最新活动报价。 一、阿里云特惠云服…

机器学习数据的清洗,转化,汇总及建模完整步骤(基于Titanic数据集)

目录 介绍: 一、数据 二、检查数据缺失 三、数据分析 四、数据清洗 五、数据类别转化 六、数据汇总和整理 七、建模 介绍: 线性回归是一种常用的机器学习方法,用于建立一个输入变量与输出变量之间线性关系的预测模型。线性回归的目标…

工业4.0|工业物联平台有多重要?IoTopo 深度解析

随着时代的发展,科学技术日新月异,人们进入了信息化的时代。现今,在物联网的逐渐普及下,物联网技术应用于工业中,也显得尤为重要;在工业网络和移动计算持续影响着制造业和工业环境的大环境中,这…

计算机毕业设计 基于SpringBoot的大学生平时成绩量化管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

Python---TCP服务端程序开发

1. 开发 TCP 服务端程序开发步骤回顾 创建服务端端套接字对象绑定端口号设置监听等待接受客户端的连接请求接收数据发送数据关闭套接字 2. socket 类的介绍 导入 socket 模块import socket 创建服务端 socket 对象socket.socket(AddressFamily, Type) 参数说明: AddressF…

SpringMVC:执行原理详解、配置文件和注解开发实现 SpringMVC

文章目录 SpringMVC - 01一、概述二、SpringMVC 执行原理三、使用配置文件实现 SpringMVC四、使用注解开发实现 SpringMVC1. 步骤2. 实现 五、总结注意: SpringMVC - 01 一、概述 SpringMVC 官方文档:点此进入 有关 MVC 架构模式的内容见之前的笔记&a…

【AI数学】NeRF中的球面谐波函数(Spherical Harmonics)

球面谐波(SH)因为其良好的性质活跃在NeRF、Plenoxels、3DGS等显隐式场景表示的方法中。 问:球面谐波是什么? 答:一组基函数。可以理解为傅里叶分解的一种特殊形式,即“任何函数都可以用这组基的算术组合来近…

记录 | gdb调试的基本命令

r (run) 运行程序 b (breakpoint) 打断点,比如 b func(打到函数) b 5(打到第5行)(当前文件) b main.cpp:5(main.cpp的第5行) b MyClass::func() (打到类的成员函数func()、在类内可以 p this 打印、p *this、p this->name) tb (temporary breakpoint) 临时断…

ctfshow(web190-web200)

目录 web190 web191 web192 web193 web194 web195 web196 web197 web198 web199 web200 web190 为什么要有admin呢 这也是试出来的 这个admin必须是数据库中存在的 这样才能使用布尔注入 因为这个时候登录 有两种返回结果 一种密码错误 一种就是用户名错误 admin an…

前端性能监控和错误监控

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

Ubuntu 常用命令之 passwd 命令用法介绍

📑Linux/Ubuntu 常用命令归类整理 在Ubuntu系统中,passwd命令用于更改用户的密码。系统管理员可以使用此命令更改任何用户的密码,而普通用户只能更改自己的密码。 passwd命令的参数如下 -l, --lock:锁定密码,使账户…

拥抱鸿蒙 - 在展讯T606平台上的探索与实践

前 言 自OpenHarmony 问世后受到了社会各界的广泛关注,OpenHarmony 的生态系统在如火如荼的发展。 酷派作为一家积极拥抱变化的公司,经过一段时间的探索与实践,成功实现将OpenHarmony 系统接入到展讯平台上,我们相信这是一个重要…

Android Studio 安装和使用

前些天,打开了几年前的一个Android Studio app项目,使用安卓虚拟机仿真app崩溃,怀疑是不是中间升级过Android Studio导致异常的,马上脑子一热卸载了,结果上次踩过的坑,一个没少又踩一次,谨以此文…

大数据技术基本功-数据采集

产品指南|DataScale自定义采集器功能介绍产品指南|开发 DataScale Collector​​​​​​​

python用什么软件编写程序,python编写的软件有哪些

大家好,本文将围绕python用什么软件编写程序展开说明,python编写的软件有哪些是一个很多人都想弄明白的事情,想搞清楚用什么软件编写python需要先了解以下几个事情。 大家好,小编来为大家解答以下问题,python可以用什么…

word文档代码高亮_简单易操作_美化代码

跳转:代码高亮网站 复制-粘贴 简单易用 网站:https://highlightcode.com/高亮优化前: 高亮优化后:

一个很好用的Docker可视化管理工具

目录 前言Portainer安装部署使用 前言 一个好的docker可视化管理工具,可以提升我们不少的工作效率,下面我就推荐一个我使用过的,感觉很不错的一个可视化管理工具给大家 Portainer Portainer是一个开源的Docker管理工具,提供了容…

kindeditor The method toJSONString() is undefined for the type JSONObject

kindeditor 插件上传文件出错的 json_simple-1.1.jar 也不知道是多老的项目,多老的包了,稀有东西