Responses¶
Views return DownloadResponse
.
Middlewares (and decorators) are given the opportunity to capture responses and
convert them to ProxiedDownloadResponse
.
DownloadResponse¶
-
class
django_downloadview.response.
DownloadResponse
(file_instance, attachment=True, basename=None, status=200, content_type=None, file_mimetype=None, file_encoding=None)¶ Bases:
django.http.response.StreamingHttpResponse
File download response (Django serves file, client downloads it).
This is a specialization of
django.http.StreamingHttpResponse
wherestreaming_content
is a file wrapper.Constructor differs a bit from
HttpResponse
.Here are some highlights to understand internal mechanisms and motivations:
Let’s start by quoting PEP 3333 (WSGI specification):
For large files, or for specialized uses of HTTP streaming, applications will usually return an iterator (often a generator-iterator) that produces the output in a block-by-block fashion.
Django WSGI handler (application implementation) returns response object (see
django.core.handlers.wsgi
).django.http.HttpResponse
and subclasses are iterators.In
StreamingHttpResponse
, the__iter__()
implementation proxies tostreaming_content
.In
DownloadResponse
and subclasses,streaming_content
is a file wrapper. File wrapper is itself an iterator over actual file content, and it also encapsulates access to file attributes (size, name, ...).
-
file
= None¶ A file wrapper instance, such as
File
.
-
basename
= None¶ Client-side name of the file to stream. Only used if
attachment
isTrue
. AffectsContent-Disposition
header.
-
attachment
= None¶ Whether to return the file as attachment or not. Affects
Content-Disposition
header.
-
file_mimetype
= None¶ Value for file’s mimetype. If
None
(the default), then the file’s mimetype will be guessed via Python’smimetypes
. Seeget_mime_type()
.
-
file_encoding
= None¶ Value for file’s encoding. If
None
(the default), then the file’s encoding will be guessed via Python’smimetypes
. Seeget_encoding()
.
-
default_headers
¶ Return dictionary of automatically-computed headers.
Uses an internal
_default_headers
cache. Default values are computed if only cache hasn’t been set.Content-Disposition
header is encoded according to RFC 5987. See also http://stackoverflow.com/questions/93551/.
-
items
()¶ Return iterable of (header, value).
This method is called by http handlers just before WSGI’s start_response() is called... but it is not called by django.test.ClientHandler! :’(
-
get_basename
()¶ Return basename.
-
get_content_type
()¶ Return a suitable “Content-Type” header for
self.file
.
-
get_mime_type
()¶ Return mime-type of the file.
-
get_encoding
()¶ Return encoding of the file to serve.
-
get_charset
()¶ Return the charset of the file to serve.
ProxiedDownloadResponse¶
-
class
django_downloadview.response.
ProxiedDownloadResponse
(content='', *args, **kwargs)¶ Bases:
django.http.response.HttpResponse
Base class for internal redirect download responses.
This base class makes it possible to identify several types of specific responses such as
XAccelRedirectResponse
.