HTTPDownloadView

HTTPDownloadView serves a file given an URL., i.e. it acts like a proxy.

This view is particularly handy when:

  • the client does not have access to the file resource, while your Django server does.
  • the client does trust your server, your server trusts a third-party, you do not want to bother the client with the third-party.

Simple example

Setup a view to stream files given URL:

from django_downloadview import HTTPDownloadView


class SimpleURLDownloadView(HTTPDownloadView):
    def get_url(self):
        """Return URL of hello-world.txt file on GitHub."""
        return 'https://raw.githubusercontent.com' \
               '/benoitbryon/django-downloadview' \
               '/b7f660c5e3f37d918b106b02c5af7a887acc0111' \
               '/demo/demoproject/download/fixtures/hello-world.txt'


class GithubAvatarDownloadView(HTTPDownloadView):
    def get_url(self):
        return 'https://avatars0.githubusercontent.com/u/235204'


simple_url = SimpleURLDownloadView.as_view()
avatar_url = GithubAvatarDownloadView.as_view()

Base options

HTTPDownloadView inherits from DownloadMixin, which has various options such as basename or attachment.

API reference

class django_downloadview.views.http.HTTPDownloadView(**kwargs)

Bases: django_downloadview.views.base.BaseDownloadView

Proxy files that live on remote servers.

url = u''

URL to download (the one we are proxying).

request_kwargs = {}

Additional keyword arguments for request handler.

get_request_factory()

Return request factory to perform actual HTTP request.

Default implementation returns requests.get() callable.

get_request_kwargs()

Return keyword arguments for use with get_request_factory().

Default implementation returns request_kwargs.

get_url()

Return remote file URL (the one we are proxying).

Default implementation returns url.

get_file()

Return wrapper which has an url attribute.