################################# 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`_. It is simple and quite naive by design: it is meant for development, not for production. See `Django ticket #2131`_: advanced file streaming is left to third-party applications. `django-downloadview` is such a third-party application. *************** django-sendfile *************** `django-sendfile`_ is a wrapper around web-server specific methods for sending files to web clients. .. note:: :func:`django_downloadview.shortcuts.sendfile` is a port of `django-sendfile`'s main function. See :doc:`/django-sendfile` for details. ``django-senfile``'s main focus is simplicity: API is made of a single ``sendfile()`` function you call inside your views: .. code:: python 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: .. code:: python 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. .. rubric:: References .. target-notes:: .. _`django.contrib.staticfiles provides a view to serve files`: https://docs.djangoproject.com/en/3.0/ref/contrib/staticfiles/#static-file-development-view .. _`Django ticket #2131`: https://code.djangoproject.com/ticket/2131 .. _`django-sendfile`: http://pypi.python.org/pypi/django-sendfile