Creating a custom Django Middleware
-
Upload
andrea-grandi -
Category
Software
-
view
311 -
download
0
Transcript of Creating a custom Django Middleware
![Page 1: Creating a custom Django Middleware](https://reader036.fdocuments.in/reader036/viewer/2022082600/587f70881a28ab9b398b7caf/html5/thumbnails/1.jpg)
DJANGO MIDDLEWARE
Creating a custom
@andreagrandi
Andrea Grandi
![Page 2: Creating a custom Django Middleware](https://reader036.fdocuments.in/reader036/viewer/2022082600/587f70881a28ab9b398b7caf/html5/thumbnails/2.jpg)
DJANGO ARCHITECTURE
![Page 3: Creating a custom Django Middleware](https://reader036.fdocuments.in/reader036/viewer/2022082600/587f70881a28ab9b398b7caf/html5/thumbnails/3.jpg)
AVAILABLE HOOKS
• process_request(request)
• process_view( request, view_func, view_args, view_kwargs)
• process_exception(request, response)• process_template_response(request, response)• process_response(request, response)
(during a request)
(during a response)
![Page 4: Creating a custom Django Middleware](https://reader036.fdocuments.in/reader036/viewer/2022082600/587f70881a28ab9b398b7caf/html5/thumbnails/4.jpg)
THINGS TO KNOW WHEN YOU WRITE A MIDDLEWARE
• You need to write a class that just inherit from object
• The order in settings.py is important: middlewares are processed from top to bottom during a request and from bottom to top during a response.
• You don’t need to implement all the available methods of a middleware. For example you can just implement process_request and process_template_response
• If you implement process_request and you decide to return an HttpResponse, all the other middlewares, views etc… will be ignored and only your response will be returned
![Page 5: Creating a custom Django Middleware](https://reader036.fdocuments.in/reader036/viewer/2022082600/587f70881a28ab9b398b7caf/html5/thumbnails/5.jpg)
EXAMPLE: BENCHMARKMIDDLEWARE
from datetime import datetime class BenchmarkMiddleware(object): def process_request(self, request): request._request_time = datetime.now() def process_template_response(self, request, response): response_time = request._request_time - datetime.now() response.context_data['response_time'] = abs(response_time) return response
![Page 6: Creating a custom Django Middleware](https://reader036.fdocuments.in/reader036/viewer/2022082600/587f70881a28ab9b398b7caf/html5/thumbnails/6.jpg)
REFERENCES
Complete example:
https://github.com/andreagrandi/benchmark-middleware-example
Documentation:
• https://docs.djangoproject.com/en/1.8/topics/http/middleware/• http://agiliq.com/blog/2015/07/understanding-django-middlewares/• http://code.runnable.com/UrSGolK00ygpAAAQ/creating-a-custom-
middleware-for-python-and-django
![Page 7: Creating a custom Django Middleware](https://reader036.fdocuments.in/reader036/viewer/2022082600/587f70881a28ab9b398b7caf/html5/thumbnails/7.jpg)
Thanks!