中间键Middleware
01.中间件顾名思义:
是介于request与response处理之间的一道处理过程,相对比较轻量级,
并且在全局上改变django的输入与输出。因为改变的是全局,所以需要谨慎实用,用不好会影响到性能。
02.自定义中间件
中间件中一共有四个方法:
process_request
process_view
process_exception
process_response
<1>创建一个中间键.py文件
1 from django.utils.deprecation import MiddlewareMixin
2 class CustomerMiddleware(MiddlewareMixin):
3
4 def process_request(self, request):
5 # 请求发出后,进入,没有返回值
6 print("CustomerMiddleware process_request")
7 #return HttpResponse("process_request中断")
8
9 def process_response(self, request, response):
10 # 视图函数走完之后进入,必须有返回值
11 print("CustomerMiddleware process_response")
12 return response # 返回的response必须加返回值,否则会报错
13
14 def process_view(self, request, callback, callback_args, callback_kwargs):
15 #走过视图之后进入_view
16 print("Md1view")
17
18 def process_exception(self, request, exception):
19 # 如果视图函数有错误,则走_exception,加参数exception进行错误捕获,
20 # 捕获后将执行process.response
21 print("md1 process_exception...")
22 return HttpResponse(exception)
<2>在settings.py中添加自己的中间键所在的地址
发起请求 proccess_request ↓ 从上到下依次经过中间键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',
'app01.my_middlewares.CustomerMiddleware' # 添加自己的中间键:路径.文件名.类名
]
视图函数views process_response ↑ 从下到上依次经过中间键middleware
03.应用案例
1、做IP访问频率限制
某些IP访问服务器的频率过高,进行拦截,比如限制每分钟不能超过20次。
2、URL访问过滤
如果用户访问的是login视图(放过)
如果访问其他视图,需要检测是不是有session认证,已经有了放行,没有返回login,这样就省得在多个视图函数上写装饰器了!