Django-middleware, djangomiddleware

Source: Internet
Author: User

Django-middleware, djangomiddleware
1. Request cycle of Django Middleware

We send a Request from the browser and get a response content HttpResponse. The process of passing this Request to Django is as follows:

That is to say, each request first goes through the process_request function in the middleware. This function returns the None or HttpResponse object. If the former is returned, it continues to process other middleware. If an HttpResponse is returned, the process is aborted, return to the webpage.

Ii. Customize and register middleware 1. Create Middleware

Create a middleware py file under the project root directory:

1 class RequestExeute (object): 2 def process_request (self, request): 3 print ('process _ request') 4 5 def process_view (self, request, callback, callback_args, callback_kwargs): 6 print ('process _ view') 7 8 def process_exception (self, request, exception): 9 "" 10 when the views function fails, execute 11: param request: 12: param exception: 13: return: 14 "15 print ('process _ exception') 16 17 def process_response (self, request, response ): 18 "19 must return HttpResponse20: param request: 21: param response: 22: return: 23" 24 print ('process _ response ') 25 return response26 27 def process_template_response (self, request, response): 28 "29 in the return value of the view function, if there is a render method, it is called 30: param request: 31: param response: 32: return: 33 "34 print ('process _ template_response ') 35 return response
Md. py2. register Middleware

In the settings. py file, register as follows:

Ps. In Versions 1.9 and earlier, the middleware keyword is: MIDDLEWARE_CLASSES

MIDDLEWARE_CLASSES = ('zqxt. middleware. BlockedIpMiddleware ',... other middleware)
Iii. execution sequence of methods in middleware 1. normal status
1 from django. shortcuts import HttpResponse 2 from django. utils. deprecation import MiddlewareMixin 3 class M1 (MiddlewareMixin): 4 def process_request (self, request): 5 print ('m1. request ') 6 # return HttpResponse ('request _ m1') 7 8 def process_view (self, request, callback, callback_args, callback_kwargs): 9 print ('m1. view ') 10 # response = callback (request, * callback_args, ** callback_kwargs) 11 # return response12 13 def process_response (self, request, response): 14 print ('m1. response ') 15 return response16 17 def process_exception (self, request, exception): 18 print ('m1. process_exception ') 19 return HttpResponse ('m1. process_exception ') 20 21 def process_template_response (self, request, response): 22 "" 23 "in the return value of the view function, if there is a render method, it is called 24: param request: 25: param response: 26: return: 27 "28 print ('m1. process_template_response ') 29 return response30 31 32 class M2 (MiddlewareMixin): 33 def process_request (self, request): 34 print ('m2. request ') 35 36 def process_view (self, request, callback, callback_args, callback_kwargs): 37 print ('m2. view ') 38 # response = callback (request, * callback_args, ** callback_kwargs) 39 # return response40 41 def process_response (self, request, response): 42 print ('m2. response ') 43 return response44 45 def process_exception (self, request, exception): 46 print ('m2. process_exception ') 47 return HttpResponse ('m2. process_exception ') 48 49 def process_template_response (self, request, response): 50 "" 51 "in the return value of the view function, if there is a render method, 52: param request: 53: param response: 54: return: 55 "" 56 print ('m2. process_template_response ') 57 return response
Process_request and process_view return None

Execution sequence:

2. Versions 1.10 and later

If process_request returns the HttpResponse object, it is returned from the process_response of the current middleware.

1 from django. shortcuts import HttpResponse 2 from django. utils. deprecation import MiddlewareMixin 3 class M1 (MiddlewareMixin): 4 def process_request (self, request): 5 print ('m1. request ') 6 return HttpResponse ('request _ m1') 7 8 def process_view (self, request, callback, callback_args, callback_kwargs): 9 print ('m1. view ') 10 # response = callback (request, * callback_args, ** callback_kwargs) 11 # return response12 13 def process_response (self, request, response): 14 print ('m1. response ') 15 return response16 17 def process_exception (self, request, exception): 18 print ('m1. process_exception ') 19 return HttpResponse ('m1. process_exception ') 20 21 def process_template_response (self, request, response): 22 "" 23 "in the return value of the view function, if there is a render method, it is called 24: param request: 25: param response: 26: return: 27 "28 print ('m1. process_template_response ') 29 return response30 31 32 class M2 (MiddlewareMixin): 33 def process_request (self, request): 34 print ('m2. request ') 35 36 def process_view (self, request, callback, callback_args, callback_kwargs): 37 print ('m2. view ') 38 # response = callback (request, * callback_args, ** callback_kwargs) 39 # return response40 41 def process_response (self, request, response): 42 print ('m2. response ') 43 return response44 45 def process_exception (self, request, exception): 46 print ('m2. process_exception ') 47 return HttpResponse ('m2. process_exception ') 48 49 def process_template_response (self, request, response): 50 "" 51 "in the return value of the view function, if there is a render method, 52: param request: 53: param response: 54: return: 55 "" 56 print ('m2. process_template_response ') 57 return response58 59 60 # class RequestExeute (object): 61 # def process_request (self, request): 62 # print ('process _ request ') 63 #64 # def process_view (self, request, callback, callback_args, callback_kwargs): 65 # print ('process _ view') 66 #67 # def process_exception (self, request, exception): 68 # "" 69 # execute 70 #: param request: 71 #: param exception: 72 #: return: 73 #"74 # print ('process _ exception') 75 #76 # def process_response (self, request, response ): 77 #"78 # must return HttpResponse79 #: param request: 80 #: param response: 81 #: return: 82 # "" 83 # print ('process _ response') 84 # return response85 #86 # def process_template_response (self, request, response ): 87 # "" 88 # in the returned value of the view function, if the render method exists, 89 #: param request: 90 #: param response: 91 #: return: 92 #"93 # print ('process _ template_response ') 94 # return response
Process_request of M1 returns HttpResponse

Execution sequence:

Process_view is similar to process_request:

1 from django. shortcuts import HttpResponse 2 from django. utils. deprecation import MiddlewareMixin 3 class M1 (MiddlewareMixin): 4 def process_request (self, request): 5 print ('m1. request ') 6 # return HttpResponse ('request _ m1') 7 8 def process_view (self, request, callback, callback_args, callback_kwargs): 9 print ('m1. view ') 10 response = callback (request, * callback_args, ** callback_kwargs) 11 return response12 13 def process_response (self, request, response): 14 print ('m1. response ') 15 return response16 17 def process_exception (self, request, exception): 18 print ('m1. process_exception ') 19 return HttpResponse ('m1. process_exception ') 20 21 def process_template_response (self, request, response): 22 "" 23 "in the return value of the view function, if there is a render method, it is called 24: param request: 25: param response: 26: return: 27 "28 print ('m1. process_template_response ') 29 return response30 31 32 class M2 (MiddlewareMixin): 33 def process_request (self, request): 34 print ('m2. request ') 35 36 def process_view (self, request, callback, callback_args, callback_kwargs): 37 print ('m2. view ') 38 # response = callback (request, * callback_args, ** callback_kwargs) 39 # return response40 41 def process_response (self, request, response): 42 print ('m2. response ') 43 return response44 45 def process_exception (self, request, exception): 46 print ('m2. process_exception ') 47 return HttpResponse ('m2. process_exception ') 48 49 def process_template_response (self, request, response): 50 "" 51 "in the return value of the view function, if there is a render method, 52: param request: 53: param response: 54: return: 55 "" 56 print ('m2. process_template_response ') 57 return response
Process_view of m1 returns HttpResponse

Execution sequence:

 

3. Versions earlier than 1.10

If process_request returns the HttpResponse object, the process_request after the current middleware will not be executed, but will be returned from the process_response of the last middleware.

 

 

 

References:

1. Path to Python [Article 16th]: Django [Basics]

2. http://code.ziqiangxuetang.com/django/django-middleware.html

 

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.