Reputation: 678
Am working on django project, that act as a distribution server to other server when they request for some certain data through and api call, this data is in form of JSON and is very large. So i was thinking is there any way i can set my DRF APIView response to serves the outputted JSON response with gzip set for the Content-Encoding so as to reduce the size of the content, when consuming by the other servers.
Currently my application is running on gunicorn with nginx on the front as a proxy.
Upvotes: 8
Views: 5942
Reputation: 2838
Django has a built-in gzip middleware.
If you're using django version <= 1.10 , in your settings.py
:
MIDDLEWARE_CLASSES = [
'django.middleware.gzip.GZipMiddleware',
...
]
If you're using django version > 1.10:
MIDDLEWARE = [
'django.middleware.gzip.GZipMiddleware',
...
]
This middleware should be placed before any other middleware that need to read or write the response body so that compression happens afterward.
Why? Because for an incoming request django processes the request using middlewares from top to bottom as defined in your settings. For out going response middlewares are called bottom to top.
So declaring gzip
middleware as the first middleware will enable the incoming request to be decompressed to be read by other middlewares ; and the outgoing response will be compressed just before leaving, so that it does not interfere with the operations of other middlewares.
Upvotes: 15