【python】Django系列Day06–Django中间件介绍

导读:本篇文章讲解 【python】Django系列Day06–Django中间件介绍,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

🙋作者:爱编程的小贤
⛳知识点:Django–中间件
🥇:每天学一点,早日成大佬

👊前言

💎 💎 💎今天我们进入Django中间件的学习啦!!! 😁 😁 😁 看完这一篇让你对中间件印象深刻 🚀 🚀 🚀学习之前先要好好复习回顾前面的内容哦!!!
如果你看完感觉对你有帮助,,,欢迎给个三连哦💗!!!您的支持是我创作的动力。🌹 🌹 🌹 🌹 🌹 🌹 感谢感谢!!!😘😘😘


🍦一、中间件的定义

Django中的中间件:

django中的中间件是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出。中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django框架的健壮性。我们可以使用中间件,在Django处理视图的不同阶段对输入或输出进行干预。

🍦二、Django内置中间件简介

在这里插入图片描述

1. django.middleware.security.SecurityMiddleware
做了一些安全处理的中间件。比如设置XSS防御的请求头,比如做了http协议转为https协议的工作等。

2. django.contrib.sessions.middleware.SessionMiddleware
session中间件。会给request添加一个处理好的session对象。

3. django.middleware.common.CommonMiddleware
通用中间件,会处理一些URL,比如baidu.com会自动的处理成www.baidu.com。比如/blog/111会处理成/blog/111/自动加上反斜杠。

4. django.middleware.csrf.CsrfViewMiddleware
保护中间件,在提交表单的时候会必须加入csrf_token,cookie中也会生成一个名叫csrftoken的值,也会在header中加入一个HTTP_X_CSRFTOKEN的值来放置CSRF攻击。SessionMiddleware必须出现在CsrfMiddleware之前。

5. django.contrib.auth.middleware.AuthenticationMiddleware
用户授权中间件。会给request添加一个user对象的中间件。该中间件必须在sessionmiddleware后面。

6. django.contrib.messages.middleware.MessageMiddleware
消息处理中间件。为了在多个模板中可以使用我们返回给模板的变量,并且简化操作。

7. django.middleware.clickjacking.XFrameOptionsMiddleware
防止通过浏览器页面跨Frame出现clickjacking(欺骗点击)攻击出现。

🍦三、开发中间件

中间件的定义方法:

①定义一个中间件工厂函数,然后返回一个可以被调用的中间件。

②中间件工厂函数需要接收一个可以调用的get_response对象。

③返回的中间件也是一个可以被调用的对象,并且像视图一样需要接受一个request对象参数,返回一个response对象。

step1:在子应用新建一个py文件middleware1用于定义中间件。
在这里插入图片描述
step2:在该新建的py文件中定义中间件

在这里插入图片描述
step3:在settings文件中将自定义的中间件注册。格式:’子应用名.中间件py文件名.外函数名’即中间件的python路径
【python】Django系列Day06--Django中间件介绍

具体格式:

# 此处编写的代码仅在Django第一次配置和初始化的时候执行一次。 

def middleware(request): 
	# 此处编写的代码会在每个请求处理视图前被调用。 
	
	response = get_response(request)
	
	# 此处编写的代码会在每个请求处理视图之后被调用。 
	
	return response 
	
return middleware


#定义好中间件后,需要在settings.py 文件中添加注册中间件 
MIDDLEWARE = [ 
	***** 
	'users.middleware.my_middleware', # 添加中间件 
]
def MyMiddleware1(get_response):       # 接收响应对象
    print('MyMiddleware1 is used')      # 此处代码在项目启动时会执行,也就是在加载配置文件的时候调用的

    def wrapper(request):   # 接收请求对象
        print('---------1---------')
        print('请求路径:%s' % request.path)     # 内部函数中,此处之前(包括此处的代码)的代码在视图处理前调用
        response = get_response(request)        # 视图, 响应对象
        # response指向的视图是哪一个视图,取决于请求的路径路由指定的视图是哪一个视图
        response.set_cookie('Xiaoxian', 'dashuaibi', max_age=999)
        print(response)     # 以下代码在视图处理后调用
        print(type(response))
        print('--------2---------')
        return response
    return wrapper

🍦四、中间件调用顺序

在请求视图被处理前:中间件由上至下依次执行

在请求视图被处理后:中间件由下至上依次执行

在这里插入图片描述

类似递归顺序
如果中间件的位置并不在中间件列表的最后一位的话,此时response指向的就是下一个中间件,
如果中间件位于中间件列表中的最后一位,此时response指向的就是访问的视图

🍦总结

Django中间件到这里我们就讲完啦!!!!👍👍👍 如果有帮到你欢迎给个三连支持一下哦❤️ ❤️ ❤️
如果有哪些需要修改的地方欢迎指正啦!!!一起加油啦👏👏👏

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/100728.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!