默认中间件
在配置文件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 MiddlewareMixinfrom django.shortcuts import HttpResponseclass 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 Nonedef process_response(self, request, response):''':param request: 请求信息对象:param response: 视图函数返回的响应体:return:'''print("IpCheck process_response")print("IpCheck response:", response)return response
中间件应用
常用于客户端拦截、限制,如:
- 限速
 - IP黑白名单
 

