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. where os.path.exists returns True). Whereas django-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. Whereas django-downloadview’s DownloadDispatcherMiddleware 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

Table of Contents

  • Overview, concepts
  • Install
  • Configure
  • Setup views
  • Optimize streaming
  • Write tests
  • Write healthchecks
  • File wrappers
  • Responses
  • Migrating from django-sendfile
  • Demo project
  • About django-downloadview
    • Vision
    • Alternatives and related projects
    • License
    • Authors & contributors
    • Changelog
  • Contributing

Related Topics

  • Documentation overview
    • About django-downloadview
      • Previous: Vision
      • Next: License

This Page

  • Show Source

Quick search

©2012-2015, Benoît Bryon. | Powered by Sphinx 8.1.3 & Alabaster 1.0.0 | Page source