一、什么是中间件
官方说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子,他是一个轻量、低级别的插件系统;
影响:影响全局范围内改变Django的输入和输出。影响是全局的;所以需要谨慎使用;
其实我们一直在试用中间件,像之前的Csrf和Session都是中间件:只是我们没有意识到而已;
打开Django项目的Setting.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', 'Test_Middleware.Per_Middleware.MD1', 'Test_Middleware.Per_Middleware.MD2', ]
在MIDDLEWARE配置里面的,一个个字符串,这些字符串都是一个个的类,也就是一个个的中间件类;
像我们注释掉的Csrf这个中间件,这样我们在提交post请求时就不会被forbidden了,当我们使用{{ csrf_token }}以后就不需要注释这个中间件了;
二、如何定义一个自己中间件
我们要实现自己定义的中间件:1.需要继承Django开发好的MiddlewareMixin类; 2.重构父类的五个方法(根据需要决定实现方法的个数); 3.把自定义的中间件类添加到Django项目的setting.py的MIDDLEWARE的配置里面;
中间件实现的方法:
process_request(self, request):
process_response(self, request, response):
process_view(self, request, view_func, view_args, view_kwargs):
process_exception(self, request, exception):
process_template_response(self, request, response):
这五个方法:
request, view, exception, template_response这四个方法的返回值可以是None 或者HttpResponse对象(HttpResponse render rediect);
response的必须要有返回值且必须为HttpResponse对象(HttpResponse render rediect);