◢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.rhkb.cn/news/221904.html

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

相关文章

【JavaWeb学习笔记】13 - JSP浏览器渲染技术

JSP 一、JSP引入 1.JSP现状 1.目前主流的技术是前后端分离(比如: Spring Boot Vue/React),我们会讲的.[看一下] 2. JSP技术使用在逐渐减少,但使用少和没有使用是两个意思,一些老项目和中小公司还在使用JSP,工作期间,你很有可能遇到JSP …

手写单链表(指针)(next域)附图

目录 创建文件: 具体实现: 首先是头插。 注意:一定要注意:再定义tmp时,要给它赋一个初始值(推荐使用 new list_next) 接着是尾插: 随后是中间插: 然后是最简单的改值&#xf…

Linux笔记---系统信息

🍎个人博客:个人主页 🏆个人专栏:Linux学习 ⛳️ 功不唐捐,玉汝于成 目录 前言 命令 1. uname - 显示系统信息 2. hostname - 显示或设置系统主机名 3. top - 显示系统资源使用情况 4. df - 显示磁盘空间使用情…

IDEA Community html文件里的script标签没有syntax highlighting的解决方案

在网上找到的解决方法有的是针对Ultimate版本才可以下载的plugin,对我所用的Community版本无法生效,找了一圈最后在stackoverflow上找到一个有效的方案,给需要的小伙伴分享一下:IntelliJ Community Edition: Javascript syntax hi…

Gemini 1.0:Google推出的全新AI模型,改变生成式人工智能领域的游戏规则!

Gemini 1.0:Google推出的全新AI模型,将改变生成式人工智能领域的游戏规则! 🎥 屿小夏 : 个人主页 🔥个人专栏 : IT杂谈 🌄 莫道桑榆晚,为霞尚满天! 文章目录 …

Python之set集合的相关介绍

认识python中的set集合及其用法 python中,集合(set)是一个无序排列,可哈希,支持集合关系测试,不支持索引和切片操作,没有特定语法格式,只能通过工厂函数创建.集合里不会出现两个相同的元素,所以集合常用来…

鸿蒙Harmony4.0开发-ArkTS基础知识运用

概念 1.渲染控制语法: 条件渲染:使用if/else进行条件渲染。 Column() {if (this.count > 0) {Text(count is positive)} }循环渲染:开发框架提供循环渲染(ForEach组件)来迭代数组,并为每个数组项创建…

云原生系列2-CICD持续集成部署-GitLab和Jenkins

1、CICD持续集成部署 传统软件开发流程: 1、项目经理分配模块开发任务给开发人员(项目经理-开发) 2、每个模块单独开发完毕(开发),单元测试(测试) 3、开发完毕后,集成部…

数据治理与大模型一体化实践

引言: 大模型落地到当前这个阶段,核心关注点还是领域大模型,而领域大模型落地的前提在于两点:需求端,对当前应用的降本增效以及新应用的探索;供给端,训练技术已经有较高的成熟度。 专家介绍: …

2023 英特尔On技术创新大会直播 |探索视觉AI的无限可能

2023 英特尔On技术创新大会直播 | 探索视觉AI的无限可能 前言一未来的 AI:释放视觉 AI 真正潜力二AI技术突破、视觉Al挑战及前沿研究创新三全尺度视觉学习全尺度视觉学习示例1.GridConv 实现三维人体姿态估计更高准确率2.KW 预训练及迁移模型性能3.无数据增强稠密对…

linux搭建gitlab

gitlab的介绍 区别于github,github是面向互联网基于git实现的代码托管平台,gitlab是基于Ruby语言实现的git管理平台软件,一般用于公司内部代码仓库。 gitlab组成 Nginx 静态Web服务器Gitlab-workhorse 轻量级的反向代理服务器Gitlab-shell 用…

TikTok获客工具定制开发怎么做?

随着社交媒体的兴起,越来越多的企业开始把目光投向了海外市场,而在这个数字化时代,TikTok已经成为了一个备受欢迎的短视频平台,不仅吸引了大量的年轻用户,也成为了许多企业的新宠。 但是,如何在TikTok上获…

全球移动通信(2G/3G/4G/5G)频谱分布情况

一、概述 随着通信技术的不断发展,全球各国都在积极推进2G、3G、4G、5G网络的建设和应用。根据FCC统计,目前全球移动通信频谱分布如下: 二、分布 (一)俄罗斯 2G:主要使用900MHz和1800MHz两个频段。其中&…

jvm相关命令操作

查看jvm使用情况 jmap -heap PID 查看线程使用情况 jstack pid 查看当前线程数 jstack 21294 |grep -E (#[0-9]) -o -c 查看系统线程数 top -H top -Hp pid #查看具体的进程中的线程信息 使用 jps 命令查看配置了JVM的服务 查看某个进程JVM的GC使用情况 jstat -gc 进程…

算法基础之约数个数

约数个数 核心思想&#xff1a; 用哈希表存每个质因数的指数 然后套公式 #include <iostream>#include <algorithm>#include <unordered_map>#include <vector>using namespace std;const int N 110 , mod 1e9 7;typedef long long LL; //long l…

链接未来:深入理解链表数据结构(一.c语言实现无头单向非循环链表)

在上一篇文章中&#xff0c;我们探索了顺序表这一基础的数据结构&#xff0c;它提供了一种有序存储数据的方法&#xff0c;使得数据的访 问和操作变得更加高效。想要进一步了解&#xff0c;大家可以移步于上一篇文章&#xff1a;探索顺序表&#xff1a;数据结构中的秩序之美 今…

Linux 音视频SDK开发实践

一、兼容性适配处理 为什么需要兼容处理&#xff1f; 1、c兼容处理 主要有ABI兼容性问题&#xff0c;不同ubuntu系统依赖的ABI版本如下&#xff1a; ubuntu 18.04ubuntu 16.04ubuntu 14.04g7.55.44.8stdc版本libstdc.so.6.0.25libstdc.so.6.0.21libstdc.so.6.0.19GLIBCXXG…

org.slf4j日志组件实现日志功能

slf4j 全称是Simple Logging Facade for Java。facade是一种设计模式。 slf4j 是一个抽象程度更高的日志组件&#xff0c;本身并不提供实际的日志功能。实际的日志功能是通过log4j等日志组件实现&#xff0c;而使用者只需要关心 slf4j 给出的API。 slf4j 仅仅是一个为Java程序提…

STM32-ADC模数转换器

目录 一、ADC简介 二、逐次逼近型ADC内部结构 三、STM32内部ADC转换结构 四、ADC基本结构 五、输入通道 六、转换模式 6.1单次转换&#xff0c;非扫描模式 6.2连续转换&#xff0c;非扫描模式 6.3单次转换&#xff0c;扫描模式 6.4连续转换&#xff0c;扫描模式 七、…

QT打包exe文件,在其它电脑里双击exe就可以直接运行

想要不依赖QT环境&#xff0c;在其它电脑里直接双击exe文件就可以运行当前程序。具体打包过程如下&#xff1a; 使用QT编译出release版本的exe release版本运行无误后&#xff0c;需要找到当前构建生成的exe所在文件夹 可以看到具体目录在这里 我在该目录下的bin文件夹里找到…