Django大回顾 - 8 中间件、csrf认证相关

【1】中间件

中间件是什么?

        中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出。因为改变的是全局,所以需要谨慎实用,用不好会影响到性能

 


作用:

        1 、全局的请求拦截---》如果它没有登录---》就不允许访问
        2、 拦截所有请求,获取请求的ip地址
        3、 记录所有用户的访问日志
        4、 统一在响应头中加数据

        【1.1】中间件方法

# 1、
process_request(self,request) # 请求来了,就会走# 2、
process_response(self, request, response) # 请求走了就会走# 3、
process_view(self, request, callback, callback_args, callback_kwargs) #视图函数执行之前调用# 4、
process_template_response(self,request,response) # 渲染模板之前会走# 5、
process_exception(self, request, exception) # 视图函数中出现异常了才执行

        【1.2】django内置中间件

'''
django内置一些中间件---》增强了djagno的功能
request.session
request.user
post 请求提交数据,拦截了---》csrf认证'''MIDDLEWARE = ['django.middleware.security.SecurityMiddleware',# session相关的中间件'django.contrib.sessions.middleware.SessionMiddleware',# 公共中间件---》访问不带 / 路径,如果有 带 / 的路径,他会让你重定向到这个地址'django.middleware.common.CommonMiddleware',# csrf认证    xss  cors'django.middleware.csrf.CsrfViewMiddleware',# 认证:request.user--->这个中间件做的'django.contrib.auth.middleware.AuthenticationMiddleware',# django的消息框架---》flask--》闪现'django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware',
]

        【1.3】自定义中间件

# 自定义中间件来使用,记录用户的请求地址和user-agent
class SaveRemoteAddr(MiddlewareMixin):def process_request(self, request):# request 是WSGIRequest 的对象# print(request.session) # 一定要保证,session的中间件要在上面# 这个request 就是当次请求的request# 取出ipip = request.META.get('REMOTE_ADDR')user_agent = request.META.get('HTTP_USER_AGENT')print(ip)print(user_agent)# return HttpResponse('不让你看了') # 不会再走视图函数了'''能返回的情况:1 None,表示执行完这个代码,继续往后执行---》还有中间件,继续执行--》最后进视图函数2 四件套,后续不走了,中间件的process_response---》直接返回给浏览器了'''

        【1.4】中间件,在响应头加入访问时间

import datetime
class AddHeaderMiddleWare(MiddlewareMixin):def process_response(self, request, response):# request中有没有session? 有# request 如果在视图函数中,往request中放了值,在这里,就可以取出来 request.xxx# print(request.xxx)# 所有cookie中都带# response.set_cookie('xxxxx', 'asdfds')# 写入到响应头,访问服务端的时间response['ttt'] = datetime.datetime.now()return response  # 一定要返回response对象

【2】csrf认证相关

1、csef:跨站请求伪造

 


2、攻击原理:

            -在同一个浏览器中,如果登录了A网站,没有退出,在B网站中,向A网站发送请求,浏览器会自动携带A网站的cookie,对于A网站后端来讲, 它就分辨不清到底是用户真实发的请求,还是黑客网站发的请求【都会携带用户真实的cookie】
     

3、如何防范:

        

# 如何防范:-django解决了这个问题---》只要发送post请求,必须携带一个csrf_token 随机字符串--->后端给的-这个随机字符串可以带的位置?1 请求体中(urlencoded,form-data):{csrfmiddlewaretoken:asdfasdf}2 放在请求头中:'X-CSRFToken':asdfasdfasd3 ajax提交数据:默认是urlencoded,放在请求体中没有任何问题$.ajax({method: 'post',data: {username, password, csrfmiddlewaretoken},success: function (res) {console.log(res)}})4 ajax提交,使用json格式---》就不能放在请求体中只能放在请求头中:$.ajax({method: 'post',headers:{'X-CSRFToken':csrfmiddlewaretoken},contentType: 'application/json',data: JSON.stringify({username, password}),success: function (res) {console.log(res)}})# post 提交的数据,都是从request.POST中取,前提是:必须是urlencoded和form-data格式
# 如果是json是取不到的# 如果使用ajax发送请求redirect  render就用不了了尽量使用JsonResponse

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

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

相关文章

docker镜像管理,仓库管理基本命令

镜像管理 搜索镜像 语法: docker search 镜像名 [-f stars100] [rootlocalhost ~]# docker search nginx NAME DESCRIPTION STARS OFFICIAL AUTOMATED nginx …

React Node.js 和 Prisma 构建全栈框架

特点 快速入门:由于其表现力强,您可以使用很少的简洁、一致的声明性代码从头开始创建和部署生产就绪的 Web 应用程序。无样板代码:通过抽象出复杂的全栈功能,可以减少样板代码。这意味着需要维护和理解的代码更少!这也…

用100ask 6ull配合 飞凌 elf1的教程进行学习的记录 - ap3216

100ask板子 不用改 ap3216.c "ap3216creg.h" 添加到drivers/misc 从这抄的: https://gitee.com/flameboyence/linux_driver_example/tree/master/22_i2c #include <linux/types.h> #include <linux/kernel.h> #include <linux/delay.h> #includ…

2023亚太地区五岳杯量子计算挑战赛

计算电源网 (CPN&#xff09;布局优化 1. 介绍 计算能力网络 &#xff08;CPN&#xff09;是一种基于业务需求分配和调度计算资源的新型信息基础设施&#xff0c;计算资源通常由终端用户、边缘服务器和云服务器组成。该网络旨在满足各种计算任务的需求。根据计算需求的空间分…

Qt/C++音视频开发57-切换音视频轨道/切换节目流/分别切换音频视频轨道

一、前言 对各种音视频文件格式的支持&#xff0c;是一个播放器的基础功能。一般的音视频文件只有1路流&#xff0c;比如音频文件只有1路音频流&#xff0c;视频文件只有1路音频1路视频流&#xff0c;实践过程中发现&#xff0c;还有一种ts格式的文件&#xff0c;可能有多路流…

Unity 关于transform.parent与transform.root

在Unity中我们要访问上层对象&#xff0c;他有两个属性&#xff1a;transform.parent和transform.root。 不过它们是有区别的。 transform.parent属性返回的是对象的父级Transform组件&#xff0c;父级就是它的上一级。假如游戏对象没有父对象&#xff0c;那么返回null。 而…

批量免费AI写作工具,批量免费AI写作软件

人工智能&#xff08;AI&#xff09;的应用在各个领域不断创新。面对繁重的写作任务,我们应该怎么完成&#xff1f;本文将专心分享批量免费AI写作的方法、工具以及选择时需要注意的事项。 批量免费AI写作的方法 利用开源AI模型 一种常见的批量免费AI写作方法是利用开源的AI模…

2024年十大最好猫罐头有哪些?2024年10款最好的猫罐头盘点

我发现不少人有这样的困扰&#xff01;买到各种数值都很好的猫罐头后&#xff0c;猫咪一点都不吃。或者是猫咪吃了猫罐头之后&#xff0c;吃了一段时间后就软便身体不舒服。 通过本文&#xff0c;我将与大家盘点2024年10款最好的猫罐头&#xff0c;并提供一些选购猫罐头的小妙招…

第三方组件自定义扫描规则

第三方例如dubbo自定义扫描组件规则方式注入进容器。例如DubboService注解的类注入进容器中&#xff0c;实现ImportBeanDefinitionRegistrar接口&#xff0c;并通过Import注解注入。 Import除了注入ImportBeanDefinitionRegistrar类&#xff0c;还可以注入配置类Configuration和…

Spacemesh、Kaspa和Chia的全面对比!

当今区块链领域&#xff0c;PoST&#xff08;Proof of Space and Time&#xff09;共识算法引领着一股新的技术浪潮。在这个热潮下&#xff0c;Chia项目作为PoST共识机制的经典项目&#xff0c;和目前算力赛道备受瞩目的Kaspa项目&#xff0c;都是不可忽视的存在。虽然这两个项…

虚拟数字人直播软件,是如何提升直播带货效率的?

近年来&#xff0c;随着直播带货的兴起&#xff0c;虚拟数字人直播软件成为了一个备受瞩目的新兴领域。无人直播带货通过虚拟数字人主持直播和推销产品&#xff0c;为商家带来了全新的营销方式。那么&#xff0c;虚拟数字人直播软件是如何进行无人直播带货的&#xff0c;有哪些…

Linux入门指南:Linux环境变量解析

Linux环境变量解析 前言基本概念和作用常见的环境变量设置环境变量Shell脚本和环境变量环境变量的一些小规则 前言 你是不是经常听说Linux环境变量&#xff0c;但又对它一头雾水&#xff1f;别着急&#xff0c;让我们一起来揭开这个神秘的面纱&#xff0c;探索一番吧&#xff…

【网络安全技术】IPsec——AH和ESP

一、IPsec通信 主要是两个协议&#xff0c;认证头AH&#xff08;Authentication Header&#xff09;和封装安全载荷ESP&#xff08;Encapsulate Security Payload&#xff09;。AH提供了认证&#xff08;integrity&#xff0c;抗否认&#xff0c;抗重放&#xff09;&#xff0c…

为什么发布实验报告

各位为什么能够看到这篇博文&#xff0c;90%的缘故是因为搜索到了完全雷同的实验报告&#xff0c;如果不是这个原因来的&#xff0c;后面部分可以不看了。 博主本人最近终于有被所谓查水表&#xff0c;并且试图开盒&#xff0c;当然博主不在意&#xff0c;毕竟当年缘分已尽&…

Python中字符串列表的相互转换详解

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 在Python编程中&#xff0c;经常会遇到需要将字符串列表相互转换的情况。这涉及到将逗号分隔的字符串转换为列表&#xff0c;或者将列表中的元素连接成一个字符串。本文将深入讨论这些情景&#xff0c;并提供丰富…

大模型应用设计的10个思考

技术不是万能的&#xff0c;但没有技术却可能是万万不能的&#xff0c;对于大模型可能也是如此。基于大模型的应用设计需要聚焦于所解决的问题&#xff0c;在自然语言处理领域&#xff0c;大模型本身在一定程度上只是将各种NLP任务统一成了sequence 到 sequence 的模型。利用大…

SAP MM 中的业务伙伴确定配置

这篇博客文章将概述 SAP MM 供应商帐户组中的合作伙伴确定是什么以及如何在 S/4 系统中配置它。 本文将指导您完成分步过程&#xff0c;并为您提供有关在供应商主数据中使用合作伙伴确定的完整想法。 合作伙伴角色 供应商在 SAP 中扮演着不同类型的角色&#xff0c;让我们通…

springboot——自动装配

自动装配 Condition: Condition内置方法&#xff1a;boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata)&#xff0c;返回值为布尔型 重写matches方法的类&#xff1a;SpringBootCondition等 SpringBootCondition&#xff1a;springboot自带的实现类…

利用 Python 进行数据分析实验(二)

一、实验目的、 使用Python解决简单问题 二、实验要求 自主编写并运行代码&#xff0c;按照模板要求撰写实验报告 三、实验步骤 本次实验共有4题&#xff1a; 输入2000年后的某年某月某日&#xff0c;判断这一天是从2000年1月1日开始算起的第几天&#xff1f;公务员面试设…

NodeJS安装

前言&#xff1a; 因为java行业不景气&#xff0c;人才严重过剩&#xff0c;像我我这样的人&#xff0c;只能选择往广度走走&#xff0c;开始学Vue3. Vue3现在默认要NodeJs版本16及以上&#xff0c;所以我这里安装了18.18.0的&#xff0c;目前逛网最新稳定版本是20版本的。 1…