django的生命周期流程图
中间件位于web服务端与url路由层之间
中间件的响应流程:当用户发起请求的时候会依次经过所有的的中间件,这个时候的请求时process_request,最后到达views的函数中,views函数处理后,在依次穿过中间件,这个时候是process_response,最后返回给请求者。

中间件的五个方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| from django.utils.deprecation import MiddlewareMixin
class My_MiddlewareMixin(MiddlewareMixin): def process_request(self, request): pass
def process_view(self, request, view_func, view_args, view_kwargs): pass
def process_template_response(self, request, response): pass
def process_exception(self, request, exception): pass
def process_response(self, request, response): return response
|
process_view的参数
1 2 3 4 5 6 7 8
|
def process_view(self, request, view_func, view_args, view_kwargs): pass
|
process_response错误:
1 2 3 4 5 6
| if response.get('X-Frame-Options') is not None: AttributeError: 'NoneType' object has no attribute 'get'
def process_response(self, request, response): return response
|
定义中间件之后在settings中注册中间件
1 2 3 4 5 6 7 8 9 10 11 12 13
| MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.CommonMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'myapp.md_user.My_MiddlewareMixin', ]
|
使用django原生Httpresponse返回Json格式
1 2 3 4 5 6 7 8 9
| def process_request(self, request): return Httpresponse(json.dumps({'message':'您的秘钥无权限'},indent=4,ensure_ascii=False),content_type="application/json") return JsonResponse({'message':'您的秘钥无权限'},safe=False,json_dumps_params=({'ensure_ascii':False,'indent':4}))
|
因为每次请求都要走中间件,所以针对路由判断是否走中间件
1 2 3 4
| def process_request(self, request): if request.path_info.startswith('/userinfo/'): return Httpresponse(json.dumps({'message':'您的秘钥无权限'},indent=4,ensure_ascii=False),content_type="application/json")
|