本文主要参考自:https://www.cnblogs.com/zlpbk/p/9512673.html (文章写得非常好,强烈推荐初学者把这篇博客吃透。)
中间件属于切面编程。
一 .概念
1.中间的件的五个方法:
- 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)
2.中间件的继承和配置:
继承实现的接口:django.utils.deprecation.MiddlewareMixin
配置形式:开jango项目的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',
]
3.中间件间的执行顺序
有多个中间件时:
方法 | 按照MIDDLEWARE中的注册执行顺序 |
process_request | 顺序 |
process_response | 倒序 |
process_view | 顺序 |
process_exception | 倒序 |
process_template_response | 倒序 |
二 . 运用
2.1 process_request(self,request)
process_request有一个参数,就是request,这个request和视图函数中的request是一样的。
它的返回值可以是None也可以是HttpResponse对象。
返回值 | 动作 |
None |