默认中间件
在配置文件settings.py
中,有一些默认中间件,如下:
Django支持自定义中间件。中间件的执行顺序和在列表MIDDLEWARE
中的顺序一样。
中间件的执行流程
如果process_request
的返回值为None,继续下一个process_request
,否则直接从本级process_response
返回。
中间件源码剖析
要看到源码,得把模块语法写成 from xxx import xxx
,然后发现djagno中间件的源码格式类似:均有process_request
、process_response
方法。
process_request
process_response
response默认是视图的传递过来的response
。response.content
代码返回的信息(字节类型)。
一般这个process_response
用的少。
'''IP检测'''
from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import HttpResponse
class IpCheck(MiddlewareMixin):
def process_request(self, request):
'''
:param request: 请求信息对象
:return: 默认返回None,当返回一个响应体的时候,实现了拦截,原路返回
'''
print("IpCheck process_request")
# 非法IP识别
visit_ip = request.META.get("REMOTE_ADDR")
if visit_ip in ['127.0.0.1']:
return HttpResponse("<h1>非法IP!</h1>")
return None
def process_response(self, request, response):
'''
:param request: 请求信息对象
:param response: 视图函数返回的响应体
:return:
'''
print("IpCheck process_response")
print("IpCheck response:", response)
return response
中间件应用
常用于客户端拦截、限制,如:
- 限速
- IP黑白名单