Changelog¶
This document describes changes between past releases. For information about future releases, check milestones [1] and Vision.
2.5.0 (2025-10-28)¶
Upgrade to Django 5.2 and Python 3.14
2.4.0 (2024-08-05)¶
Drop support for Python 3.6
Escape malicious filenames
Handle headers in XAccel responses
2.3.0 (2022-01-11)¶
Drop Django 3.0 support
Add Django 3.2 support
Add support for Python 3.10
Add support for Django 4.0
Remove support for Python 3.5 and Django 1.11
Add support for Python 3.9 and Django 3.1
Remove old urls syntax and adopt the new one
Move the project to the jazzband organization
Adopt black automatic formatting rules
2.1.1 (2020-01-14)¶
Fix missing function parameter. (#152)
2.1 (2020-01-13)¶
Add a SignedFileSystemStorage that signs file URLs for clients. (#151)
2.0 (2020-01-07)¶
Drop support for Python 2.7.
Add black and isort.
1.10 (2020-01-07)¶
Introduced support from Django 1.11, 2.2 and 3.0.
Drop support of Django 1.5, 1.6, 1.7, 1.8, 1.9, 1.10, 2.0 and 2.1
1.9 (2016-03-15)¶
Feature #112 - Introduced support of Django 1.9.
Feature #113 - Introduced support of Python 3.5.
Feature #116 -
HTTPFilehascontent_typeproperty. It makesHTTPDownloadViewproxyContent-Typeheader from remote location.
1.8 (2015-07-20)¶
Bugfixes.
Bugfix #103 -
PathDownloadView.get_file()makes a single call toPathDownloadView.get_file()(was doing it twice).Bugfix #104 - Pass numeric timestamp to Django’s
was_modified_since()(was passing a datetime).
1.7 (2015-06-13)¶
Bugfixes.
Bugfix #87 - Filenames with commas are now supported. In download responses, filename is now surrounded by double quotes.
Bugfix #97 -
HTTPFileproxies bytes asBytesIteratorIO(was undecoded urllib3 file object).StringIteratorIOhas been split intoTextIteratorIOandBytesIteratorIO.StringIteratorIOis deprecated but kept for backward compatibility as an alias forTextIteratorIO.Bugfix #92 - Run demo using
make demo runserver(was broken).Feature #99 - Tox runs project’s tests with Python 2.7, 3.3 and 3.4, and with Django 1.5 to 1.8.
Refactoring #98 - Refreshed development environment: packaging, Tox and Sphinx.
1.6 (2014-03-03)¶
Python 3 support, development environment refactoring.
Feature #46: introduced support for Python>=3.3.
Feature #80: added documentation about “how to serve a file inline VS how to serve a file as attachment”. Improved documentation of views’ base options inherited from
DownloadMixin.Feature #74: the Makefile in project’s repository no longer creates a virtualenv. Developers setup the environment as they like, i.e. using virtualenv, virtualenvwrapper or whatever. Tests are run with tox.
1.5 (2013-11-29)¶
X-Sendfile support and helpers to migrate for django-sendfile.
Feature #2 - Introduced support of Lighttpd’s x-Sendfile.
Feature #36 - Introduced support of Apache’s mod_xsendfile.
Feature #41 -
django_downloadview.sendfileis a port of django-sendfile’ssendfilefunction. The documentation contains notes about migrating from django-sendfile to django-downloadview.
1.4 (2013-11-24)¶
Bugfixes and documentation features.
Bugfix #43 -
ObjectDownloadViewreturns HTTP 404 if model instance’s file field is empty (was HTTP 500).Bugfix #7 - Special characters in file names (
Content-Dispositionheader) are urlencoded. An US-ASCII fallback is also provided.Feature #10 - django-downloadview is registered on djangopackages.com.
Feature #65 - INSTALL documentation shows “known good set” (KGS) of versions, i.e. versions that have been used in test environment.
1.3 (2013-11-08)¶
Big refactoring around middleware configuration, API readability and documentation.
Bugfix #57 -
PathDownloadViewopens files in binary mode (was text mode).Bugfix #48 - Fixed
basenameassertion inassert_download_response: checksContent-Dispositionheader.Bugfix #49 - Fixed
contentassertion inassert_download_response: checks only response’sstreaming_contentattribute.Bugfix #60 -
VirtualFile.__iter__usesforce_bytes()to support both “text-mode” and “binary-mode” content. See https://code.djangoproject.com/ticket/21321Feature #50 - Introduced
django_downloadview.DownloadDispatcherMiddlewarethat iterates over a list of configurable download middlewares. Allows to plug several download middlewares with different configurations.This middleware is mostly dedicated to internal usage. It is used by
SmartDownloadMiddlewaredescribed below.Feature #42 - Documentation shows how to stream generated content (yield). Introduced
django_downloadview.StringIteratorIO.Refactoring #51 - Dropped support of Python 2.6
Refactoring #25 - Introduced
django_downloadview.SmartDownloadMiddlewarewhich allows to setup multiple optimization rules for one backend.Deprecates the following settings related to previous single-and-global middleware:
NGINX_DOWNLOAD_MIDDLEWARE_MEDIA_ROOTNGINX_DOWNLOAD_MIDDLEWARE_MEDIA_URLNGINX_DOWNLOAD_MIDDLEWARE_EXPIRESNGINX_DOWNLOAD_MIDDLEWARE_WITH_BUFFERINGNGINX_DOWNLOAD_MIDDLEWARE_LIMIT_RATE
Refactoring #52 - ObjectDownloadView now inherits from SingleObjectMixin and BaseDownloadView (was DownloadMixin and BaseDetailView). Simplified DownloadMixin.render_to_response() signature.
Refactoring #40 - Documentation includes examples from demo project.
Refactoring #39 - Documentation focuses on usage, rather than API. Improved narrative documentation.
Refactoring #53 - Added base classes in
django_downloadview.middlewares, such asProxiedDownloadMiddleware.Refactoring #54 - Expose most Python API directly in django_downloadview package. Simplifies
importstatements in client applications. Splitted nginx module in a package.Added unit tests, improved code coverage.
1.2 (2013-05-28)¶
Bugfixes and documentation improvements.
Bugfix #26 - Prevented computation of virtual file’s size, unless the file wrapper implements was_modified_since() method.
Bugfix #34 - Improved support of files that do not implement modification time.
Bugfix #35 - Fixed README conversion from reStructuredText to HTML (PyPI).
1.1 (2013-04-11)¶
Various improvements. Contains backward incompatible changes.
Added HTTPDownloadView to proxy to arbitrary URL.
Added VirtualDownloadView to support files living in memory.
Using StreamingHttpResponse introduced with Django 1.5. Makes Django 1.5 a requirement!
Added
django_downloadview.test.assert_download_responseutility.Download views and response now use file wrappers. Most logic around file attributes, formerly in views, moved to wrappers.
Replaced DownloadView by PathDownloadView and StorageDownloadView. Use the right one depending on the use case.
1.0 (2012-12-04)¶
Introduced optimizations for Nginx X-Accel: a middleware and a decorator
Introduced generic views: DownloadView and ObjectDownloadView
Initialized project
Notes & references