官方的说法 中间件是一个用来处理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 , ]
中间件流程 一切请求都会先经过中间件才会到达Django后端 所以中间件可以用来做全局方面的一些功能
详细:给我们定义了五个方法
process_request(self,request) process_view(self, request, view_func, view_args, view_kwargs) process_template_response(self,request,response) process_exception(self, request, exception) process_response(self, request, response)
以上方法的返回值可以是None或一个HttpResponse对象 如果是None 则继续按照django定义的规则向后继续执行 如果是HttpResponse对象 则直接将该对象返回给用户。
二、中间件执行流程 2.1、执行流程图 2.2、执行过程 process_request:在执行视图函数之前执行 如果返回的是None 将一直按照MiddleWare配置的顺序向下执行 如果返回的是HttpResponse则终止向下执行 在HttpResponse的中间件这里向上倒序执行 将相应的对象返回给浏览器。如图所示
process_view:执行完process_request方法都执行完之后 匹配路由 在执行视图函数之前 先执行process_view,执行完之后再执行视图函数。如果中间返回HttpResponse则倒序返回给浏览器。 process_exception:视图函数出现异常后执行。 process_template_response:视图函数执行完之后调用对应模板返回 但视图函数返回的对象要有一个render()方法。 process_response: 在视图函数执行完之后执行 按照MiddleWare配置顺序的倒序执行。 2.3、Django请求流程图



