Django--中间键
from django.utils.deprecation import MiddlewareMixin from django.shortcuts import HttpResponse class MD1(MiddlewareMixin): def process_request(self, request): """ 1. 执行时间和顺序 在视图函数之前执行 按照中间件的注册顺序执行 2. 参数 request和视图函数中的request是同一个对象,就是请求本身 3. 返回值 1. 返回None,请求继续往后执行 2. 返回响应对象,请求直接就结束了。 :param request: :return: """ print('我的中间件MD1 process_request') request.name = 'wzx' # return HttpResponse('哈哈哈,被阻止了') def process_view(self, request, view_func, view_args, view_kwargs): """ 1. 执行时间和执行顺序 在中间件的process_request方法之后在视图函数之前执行 具体是在urls.py中得到将要执行的视图函数之后执行 按照注册的顺序执行 2. 参数 request --> 请求 view_func --> 将要执行的视图函数对象 view_args --> 视图函数的位置参数 view_kwargs --> 视图函数的关键字参数 3. 返回值 返回None --> 继续往后执行 返回响应对象 --> 不走视图函数,直接走中间件的process_response :param request: 请求对象 :param view_func: 要执行的函数对象,可以直接view_func(request)来执行 :param view_args: 额外的 :param view_kwargs: :return:没有返回值,继续往后执行;返回响应对象,不走视图函数 """ print(view_func.__name__) # 可以取到视图函数的名字 print('这是MD1 process_view') def process_response(self, request, response): """ 1. 执行时间和执行顺序 返回响应之后执行 按照注册的倒序执行 2. 参数 request --> 请求 response --> 响应对象 3. 返回值 必须返回response对象 :param request: :param response: :return: response """ print('这个是中间件MD1 process_response') return response # 必须有一个返回值,要么是原来的response,或者自定义一个返回值 # return HttpResponse('自定义的返回值') def process_template_response(self, request, response): """ 1. 视图函数返回的响应对象有render方法的时候才执行 2. 执行顺序是注册的倒叙 3. 在有执行时,必须返回一个response或者自定义一个HttpReponse对象 :param request: :param response: :return: """ print('这是MD1 process_template_response') return response def process_exception(self, request, exception): """ 1. 视图函数中抛出异常的时候才执行 按照注册的倒序执行,只要有一个中间件中的process_exception 返回响应对象就不忘后走了 直接执行 process_response方法 2. 参数 exception --> 异常 3. 返回值 返回None --> 继续往后执行 返回响应对象 :param request: :param exception: :return: """ print('这是MD1 process_exception') class MD2(MiddlewareMixin): def process_request(self, request): """ 1. 执行时间和顺序 在视图函数之前执行 按照中间件的注册顺序执行 2. 参数 request和视图函数中的request是同一个对象,就是请求本身 3. 返回值 1. 返回None,请求继续往后执行 2. 返回响应对象,请求直接就结束了。 :param request: :return: """ print('我的中间件MD2 process_request') request.name = 'wzx' # return HttpResponse('哈哈哈,被阻止了') def process_view(self, request, view_func, view_args, view_kwargs): """ 1. 执行时间和执行顺序 在中间件的process_request方法之后在视图函数之前执行 具体是在urls.py中得到将要执行的视图函数之后执行 按照注册的顺序执行 2. 参数 request --> 请求 view_func --> 将要执行的视图函数对象 view_args --> 视图函数的位置参数 view_kwargs --> 视图函数的关键字参数 3. 返回值 返回None --> 继续往后执行 返回响应对象 --> 不走视图函数,直接走中间件的process_response :param request: 请求对象 :param view_func: 要执行的函数对象,可以直接view_func(request)来执行 :param view_args: 额外的 :param view_kwargs: :return:没有返回值,继续往后执行;返回响应对象,不走视图函数 """ print(view_func.__name__) # 可以取到视图函数的名字 print('这是MD2 process_view') def process_response(self, request, response): """ 1. 执行时间和执行顺序 返回响应之后执行 按照注册的倒序执行 2. 参数 request --> 请求 response --> 响应对象 3. 返回值 必须返回response对象 :param request: :param response: :return: response """ print('这个是中间件MD1 process_response') return response # 必须有一个返回值,要么是原来的response,或者自定义一个返回值 # return HttpResponse('自定义的返回值') def process_template_response(self, request, response): """ 1. 视图函数返回的响应对象有render方法的时候才执行 2. 执行顺序是注册的倒叙 3. 在有执行时,必须返回一个response或者自定义一个HttpReponse对象 :param request: :param response: :return: """ print('这是MD2 process_template_response') return response def process_exception(self, request, exception): """ 1. 视图函数中抛出异常的时候才执行 按照注册的倒序执行,只要有一个中间件中的process_exception 返回响应对象就不忘后走了 直接执行 process_response方法 2. 参数 exception --> 异常 3. 返回值 返回None --> 继续往后执行 返回响应对象 :param request: :param exception: :return: """ print('这是MD2 process_exception') # 我的中间件MD1 process_request # 我的中间件MD2 process_request # 这是MD1 process_view # 这是MD2 process_view # 这个是视图函数login # 这是MD2 process_template_response # 这是MD1 process_template_response # login执行了render # 这个是中间件MD2 process_response # 这个是中间件MD1 process_response
执行结果
我的中间件MD1 process_request
我的中间件MD2 process_request
这是MD1 process_view
这是MD2 process_view
这个是视图函数login
这是MD2 process_template_response
这是MD1 process_template_response
login执行了render
这个是中间件MD2 process_response
这个是中间件MD1 process_response
posted on 2018-08-07 15:20 None——None 阅读(114) 评论(0) 收藏 举报
浙公网安备 33010602011771号