一、中间件基本介绍
中间件是位于平台(硬件和操作系统)和应用之间的通用服务,这些服务具有标准的程序接口和协议。针对不同的操作系统和硬件平台,它们可以有符合接口和协议规范的多种实现(这是宏观的定义)。
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', ]
- 中间件的处理顺序
- 上图中的处理流程中,共有5个箭头,每个箭头都是提供给用户自定义的函数。
process_request(self,request) # 作用:执行主路由之前被掉用,在每个请求上调用,返回None(请求通过)或者HttpResponse对象(请求不通过) process_view(self, request, view_func, view_args, view_kwargs) # view_func为视图函数,view_args是位置参数,view_kwargs是关键字参数,调用视图之前被调用,在每个请求上调用,返回None(请求通过)或者HttpResponse对象(请求不通过) process_exception(self, request, exception) # 处理过程中抛出异常时被调用,返回一个HttpResponse对象 process_response(self, request, response) # 视图函数的响应对象;在所有响应返回浏览器之前被调用,在每个请求上调用,返回HttpResponse对象 process_template_response(self,request,response) # 在视图函数执行完毕,且视图函数返回的对象中包含render方法时被调用;该方法需要返回实现了render方法的响应对象 注意:中间件中的大多数方法在返回None时表示忽略当前操作进入下一项事件,当返回HttpResponse对象时,表示此请求结束,直接返回给客户端
- 中间件的编写
# 校验请求是否合法 from django.utils.deprecation import MiddlewareMixin from conf.config import AUTHTOKEN class MWare(MiddlewareMixin): def process_request(self,request): if request.META.get('HTTP_AUTHTOKEN') != AUTHTOKEN: return HttpResponse("Forbidden", status=403) # 在setting.py文件中注册该中间件 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.auth.AuthTokenCheck", ]