◢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 forms

class 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:
                continue
            field.widget.attrs['class'] = 'form-control'  # 添加属性
            field.widget.attrs['placeholder'] = field.label  # 添加属性

class BootstrapModelForm(Bootstrap,forms.ModelForm):#ModelForm组件使用
    pass

class BootstrapForm(Bootstrap,forms.Form):#Form组件使用
    pass
class AdminModelForm(BootstrapModelForm):#不用写__init__方法
    twopwd = forms.CharField(
        label='确认密码',
        widget=forms.PasswordInput(render_value=True)
    )
    class Meta:
        model = Admin
        fields = ['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:#自然向后走就可以
            return
        return redirect('/login/')

    def process_response(self,request,response):
        print('M1', '走了')
        return response

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一个正则快速找到在ES中使用profile的时产生慢查询的分片

在es中使用profile分析慢查询的时候,往往因为分片过多,或者因为查询条件太复杂,分析的结果几十万行。在kibana上点半天,也找不到一个耗时长的分片。 kibana上可以通过正则来匹配。其实我们只需要匹配到耗时大于10秒的请求。 检索语…

yolo-nas无人机高空红外热数据小目标检测(教程+代码)

前言 YOLO-NAS是目前最新的YOLO目标检测模型。从一开始,它就在准确性方面击败了所有其他 YOLO 模型。与之前的 YOLO 模型相比,预训练的 YOLO-NAS 模型能够以更高的准确度检测更多目标。但是我们如何在自定义数据集上训练 YOLO NAS? 这将是我…

多媒体信息化建设,动态数据中心,深入理解分布式系统

目录 一、前言二、双活数据中心三、数据备份方式四、设计双活数据中心需要考虑的问题1、延迟和稳定性2、Quorum/ Tie-Breaker3、工作负载 五、动态数据中心六、深入理解分布式系统1、内容介绍2、作者简介 大家好,我是哪吒。 文末送5本《深入理解分布式系统》 一、…

CentOS:Docker容器中安装vim

在使用docker容器时,里边没有安装vim时,敲vim命令时提示说:vim: command not found 这个时候就须要安装vim,安装命令: apt-get install vim 出现以下错误: 解决方法: apt-get update 这个命令的…

LabVIEW的六轴工业机器人运动控制系统

LabVIEW开发六轴工业机器人运动控制系统 本项目开发了一个高效的工业机器人控制系统,重点关注于运动学算法和轨迹规划算法的实现和测试。LabVIEW作为一个关键技术,在项目中扮演了核心角色。 系统研究与算法开发:首先,项目围绕机…

棱镜七彩获工业和信息化部电子第五研究所感谢信

近日,工业和信息化部电子第五研究所(以下简称“工信部电子五所”)发来一封感谢信,对棱镜七彩在系统研发及运维保障工作中做出的贡献表示感谢。 图 工业和信息化部电子第五研究所感谢信 服务保障平台和赛宝优选平台应用解决方案征…

计算机网络-网络协议

一、TCP/IP协议 作为一个小萌新,当然我无法将tcp/ip协议的大部分江山和盘托出,但是其中很多面试可能问到的知识,我觉得有必要总结一下! 首先,在学习tcp/ip协议之前,我们必须搞明白什么是tcp/ip协议。 1、…

合伙企业对外投资收益怎么纳税?

根据合伙企业的税收政策,合伙企业对外投资收益的纳税问题需要根据投资所得的性质进行分类处理。 首先,如果合伙企业对外投资获得的收益属于股息、红利、利息等被动收入,那么这些收入需要按照个人所得税法中的“利息、股息、红利所得”进行纳税…

【蓝桥杯】树的重心

树的重心 图的dfs模板 int dfs(int u) {st[u]true;for(int ih[u];i!-1;ine[i]){int je[i];if(!st[j]){dfs(j);}} }树是这样的。 邻接表: 1: 4->7->2->-1 2: 5->8->1->-1 3: 9->4->-1 4: 6->3->1->-1 5: 2->-1 6: 4->-1 7…

【数据库】函数依赖

什么是函数依赖 就是在具体的表中/问题中,哪个属性决定另外几个属性。 A属性值相同的时候,能否决定唯一的B U {学号,姓名,年龄,班号,班长,课号,成绩} 就有: ‘学号’ 决…

【数组Array】力扣-1094 拼车

目录 题目描述 解题过程 题目描述 车上最初有 capacity 个空座位。车 只能 向一个方向行驶(也就是说,不允许掉头或改变方向) 给定整数 capacity 和一个数组 trips , trip[i] [numPassengersi, fromi, toi] 表示第 i 次旅行有 numPassen…

【Netty】NIO与Netty核心概念

目录 NIO编程NIO介绍NIO和BIO的比较缓冲区(Buffer)基本介绍常用API缓冲区对象创建添加数据读取数据 通道(Channel)基本介绍Channel常用类ServerSocketChannelSocketChannel Selector (选择器)基本介绍常用API介绍示例代码 NIO 三大核心原理 Netty核心概念Netty 介绍原生 NIO 存…

机器视觉运动控制一体机在喇叭跟随点胶上的应用

市场应用背景 点胶是通过使用多种粘合剂,实现产品密封、绝缘、导热和耐腐蚀等作用,可应用于多类产品的生产制造场景,例如3C消费电子、汽车新能源、光伏和半导体等领域。 点胶是喇叭生产过程中必不可少一道工艺,音圈是扬声器的重…

铸就安全可信的数字化「信息枢纽」—华为云ROMA Connect荣膺软件产品可信【卓越级】认证

近日,在工业和信息化部电子第五研究所组织的软件产品可信评估中,华为云ROMA Connect在基线合规、渗透测试、产品可靠性、软件工程化、隐私合规、代码自研率检测、产品质量、开源治理8大方面通过严格评测,获得代表软件产品可信最高水平的「卓越…

亲测有效:导入下载starter-canal 依赖

第一步: 前往 https://github.com/chenqian56131/spring-boot-starter-canal 下载zip文件,解压到自己的maven仓库 第二步:下载完成进入项目根目录starter-canal 中 ,在文件管理器地址栏输入cmd,进入到cmd窗口&#x…

22 Vue3中使用v-for遍历对象

概述 使用v-for遍历对象在真实的开发中比较少见,了解即可。 对象我更喜欢统一称之为字典,假如你哪天发现我在某个前端的教程中把对象叫做字典,请你知道这两个是同一个玩意儿。 所谓字典,就是一种key-value类型的结构的统称。 …

年终收官!华为云开发者日·2023年度创享峰会成功举办

12月20日,华为云开发者日2023年度创享峰会成功举办,众多开发者与技术爱好者齐聚一堂,在现场,有600余名开发者与华为云技术专家共同就大模型应用、CodeArts软件开发等技术话题进行深入探讨,分享实战技巧与解决方案。此外…

潍柴动力从产业技术品牌出发存在全球商用车竞争机会

如今,有着潍柴标记的“心脏”,从道路用走向非道路用,从海洋内河航运走向高速高端大缸径,成功构筑起动力系统、商用车、农业装备、工程机械、智慧物流、海洋交通装备等产业板块协同发展的格局。 正如潍柴集团董事长谭旭光所说&…

linux c编程之动态库搜索路径和动态库的调试

动态库的搜索路径: 方法一:(1) 把xxx.so 放到/usr/lib或lib中 方法二:(2) 通过设置环境变量方法 绝对路径export LD_LIBRARY_PATH xxx : $LD_LIBRARY_PATHexport LD_LIBRARY_PATH$LD_LIBRARY_PATH:xxxx 方法三:(3)在/etc/ld.so.conf文件中加入我们生成库的目录vim 打开/etc…

使用Windows10的OneDrive应用程序,让文件管理上一个台阶

这篇文章解释了如何通过在文件资源管理器和OneDrive应用程序之间轮换,将OneDrive与Windows 10一起使用。 使用文件资源管理器进行组织 你不必将所有OneDrive文件都保存在硬盘上,事实上,你可以将任意数量的文件留在云中(也就是微…