Alternatives and related projects¶
This document presents other projects that provide similar or complementary functionalities. It focuses on differences with django-downloadview.
There is a comparison grid on djangopackages.com: https://www.djangopackages.com/grids/g/file-streaming/.
Here are additional highlights…
Django’s static file view¶
django.contrib.staticfiles provides a view to serve files [1]. It is simple and quite naive by design: it is meant for development, not for production. See Django ticket #2131 [2]: advanced file streaming is left to third-party applications.
django-downloadview is such a third-party application.
django-sendfile¶
django-sendfile [3] is a wrapper around web-server specific methods for sending files to web clients.
Note
django_downloadview.shortcuts.sendfile()
is a port of
django-sendfile’s main function. See Migrating from django-sendfile for details.
django-senfile
’s main focus is simplicity: API is made of a single
sendfile()
function you call inside your views:
from sendfile import sendfile
def hello_world(request):
"""Send 'hello-world.pdf' file as a response."""
return sendfile(request, '/path/to/hello-world.pdf')
The download response type depends on the chosen backend, which could be Django, Lighttpd’s X-Sendfile, Nginx’s X-Accel… depending your settings:
SENDFILE_BACKEND = 'sendfile.backends.nginx' # sendfile() will return
# X-Accel responses.
# Additional settings for sendfile's nginx backend.
SENDFILE_ROOT = '/path/to'
SENDFILE_URL = '/proxied-download'
Here are main differences between the two projects:
django-sendfile
supports only files that live on local filesystem (i.e. whereos.path.exists
returnsTrue
). Whereasdjango-downloadview
allows you to serve or proxy files stored in various locations, including remote ones.django-sendfile
uses a single global configuration (i.e.settings.SENDFILE_ROOT
), thus optimizations are limited to a single root folder. Whereasdjango-downloadview
’sDownloadDispatcherMiddleware
supports multiple configurations.
References
[1] | https://docs.djangoproject.com/en/3.0/ref/contrib/staticfiles/#static-file-development-view |
[2] | https://code.djangoproject.com/ticket/2131 |
[3] | http://pypi.python.org/pypi/django-sendfile |