django中间件

什么是中间件

官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子。它是一个轻量、低级别的插件系统,用于在全局范围内改变Django的输入和输出。每个中间件组件都负责做一些特定的功能。

但是由于其影响的是全局,所以需要谨慎使用,使用不当会影响性能。

说的直白一点中间件是帮助我们在视图函数执行之前和执行之后都可以做一些额外的操作,它本质上就是一个自定义类,类中定义了几个方法,Django框架会在请求的特定的时间去执行这些方法。

我们一直都在使用中间件,只是没有注意到而已,打开Django项目的Settings.py文件,看到下面的MIDDLEWARE配置项。

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

MIDDLEWARE配置项是一个列表(列表是有序的,记住这一点,后面你就知道为什么要强调有序二字),列表中是一个个字符串,这些字符串其实是一个个类,也就是一个个中间件。

我们之前已经接触过一个csrf相关的中间件了?我们一开始让大家把他注释掉,再提交post请求的时候,就不会被forbidden了,后来学会使用csrf_token之后就不再注释这个中间件了。

django中间件暴露给程序员五个可以自定义的方法(五个方法都是在特定的条件下自动触发的)

1.新建一个文件夹 里面新建一个任意名称的py文件
里面写类 固定继承
from django.utils.deprecation import MiddlewareMixin
class MyMiddle(MiddlewareMixin):
	...
2.去配置文件注册到中间件配置中
	你需要手写字符串的路径
	 'app01.mymiddleware.myaabb.MyMiddle1'


需要掌握的
	process_request(******):请求来的时候 会从上往下依次经过每一个中间件里面process_request,一旦里面返回了HttpResponse对象那么就不再往后执行了 会执行同一级别的process_response
			def process_request(self,request):
				print('我是第一个自定义中间件里面的process_request方法')
				return HttpResponse("我是第一个自定义中间件里面的HttpResponse对象返回值")  # 直接原地返回
	process_response(***):响应走的时候 会从下往上依次进过每一个中间件里面的process_response
			def process_response(self,request,response):  # response就是要返回给用户的数据
				print("我是第一个自定义中间件里面的process_response方法")
				return response

了解的
	process_view:路由匹配成功之后执行视图函数之前触发
	process_exception:当视图函数出现异常(bug)的时候自动触发
	process_template_response:当视图函数执行完毕之后并且返回的对象中含有render方法的情况下才会触发

原文地址:https://www.cnblogs.com/aden668/p/11766237.html