django-downloadview/docs/optimizations/index.txt

51 lines
1.5 KiB
Text

#############
Optimizations
#############
Some reverse proxies allow applications to delegate actual download to the
proxy:
* with Django, manage permissions, generate files...
* let the reverse proxy serve the file.
As a result, you get increased performance: reverse proxies are more efficient
than Django at serving static files.
.. toctree::
nginx
Currently, only `nginx's X-Accel`_ is supported, but `contributions are
welcome`_!
*****************
How does it work?
*****************
The feature is inspired by `Django's TemplateResponse`_: the download views
return some :py:class:`django_downloadview.response.DownloadResponse` instance.
Such a response doesn't contain file data.
By default, at the end of Django's request/response handling, Django is to
iterate over the ``content`` attribute of the response. In a
``DownloadResponse``, this ``content`` attribute is a file wrapper.
It means that decorators and middlewares are given an opportunity to capture
the ``DownloadResponse`` before the content of the file is loaded into memory
As an example, :py:class:`django_downloadview.nginx.XAccelRedirectMiddleware`
replaces ``DownloadResponse`` intance by some
:py:class:`django_downloadview.nginx.XAccelRedirectResponse`.
**********
References
**********
.. target-notes::
.. _`nginx's X-Accel`: http://wiki.nginx.org/X-accel
.. _`contributions are welcome`:
https://github.com/benoitbryon/django-downloadview/issues?labels=optimizations
.. _`Django's TemplateResponse`:
https://docs.djangoproject.com/en/1.4/ref/template-response/