Skip to main content

Django middleware to compress responses using several algorithms.

Project description

This middleware implements compressed content encoding for HTTP. It is similar to Django’s GZipMiddleware (documentation), but additionally supports other compression methods. It is meant to be a drop-in replacement for Django’s GZipMiddleware. Its documentation — including security warnings — therefore apply here as well.

The middleware is focussed on the task of compressing typical Django responses such as HTML, JSON, etc. Both normal (bulk) and streaming responses are supported. For static file compression, have a look at other projects such as WhiteNoise.

Most browsers now support Brotli compression (check support status on Can I use… Brotli). The middleware will choose the best compression method supported by the client as indicated in the request’s Accept-Encoding header. In order of preference:

  • Brotli

  • gzip

Summary of the project status:

https://travis-ci.org/friedelwolff/django-compression-middleware.svg?branch=master

Installation

  • Supported Python versions: 2.7, 3.4, 3.5, 3.6 and 3.7. CPython and PyPy are supported.

  • Supported Django versions: 1.11 (LTS), 2.0, 2.1.

pip install --upgrade django-compression-middleware

Add compression_middleware.middleware.CompressionMiddleware to the MIDDLEWARE setting:

MIDDLEWARE = [
    'compression_middleware.middleware.CompressionMiddleware',
    # ...
]

Remove GZipMiddleware and BrotliMiddleware if you used it before.

Note that your browser might not send the br entry in the Accept-Encoding header when you test without HTTPS (common on localhost). You can force it to send the header, though. In Firefox, visit about:config and set network.http.accept-encoding to indicate support. Note that you might encounter some problems on the web with such a setting (which is why Brotli is only supported on secure connections by default).

Credits and Resources

The code and tests in this project are based on Django’s GZipMiddleware and Vašek Dohnal’s django-brotli. For compression, it uses the following modules to bind to fast C modules:

  • The Brotli bindings or brotlipy. The latter is preferred on PyPy since it is implemented using cffi. But both should work on both Python implementations.

  • Python’s builtin gzip module.

Further readding on Wikipedia:

Contributing

  1. Clone this repository (git clone ...)

  2. Create a virtualenv

  3. Install package dependencies: pip install --upgrade -r requirements_dev.txt

  4. Change some code

  5. Run the tests: in the project root simply execute pytest, and afterwards preferably tox to test the full test matrix. If you don’t have all the Python interpreters, consider running tox --skip-missing-interpreters.

  6. Submit a pull request and check for any errors reported by the Continuous Integration service.

License

The MPL 2.0 License

Copyright (c) 2019 Friedel Wolff

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-compression-middleware-0.1.0.tar.gz (11.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_compression_middleware-0.1.0-py2.py3-none-any.whl (7.5 kB view details)

Uploaded Python 2Python 3

File details

Details for the file django-compression-middleware-0.1.0.tar.gz.

File metadata

  • Download URL: django-compression-middleware-0.1.0.tar.gz
  • Upload date:
  • Size: 11.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.30.0 CPython/3.7.2

File hashes

Hashes for django-compression-middleware-0.1.0.tar.gz
Algorithm Hash digest
SHA256 3e0d888d221dc4c62dc9488fbd811ac03192f8b4d4d3e4b9ffb6606c2102fe32
MD5 e7a3bcc47f713d87741719f2f074911d
BLAKE2b-256 f421749aa8b91386dc11d577ce01e33cd98cce93a157491df111edbbcc95583a

See more details on using hashes here.

File details

Details for the file django_compression_middleware-0.1.0-py2.py3-none-any.whl.

File metadata

  • Download URL: django_compression_middleware-0.1.0-py2.py3-none-any.whl
  • Upload date:
  • Size: 7.5 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.30.0 CPython/3.7.2

File hashes

Hashes for django_compression_middleware-0.1.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 7fe6c208b5d533c8ef650951aaec7c45a893585467d9065a5f7b5534f47bd333
MD5 7543f4faa9c4f57590d12be5217489cc
BLAKE2b-256 aa19236c77946e5cbb19c29c93f947ab7fc72850193d8a4aa567f710cdbcc4bc

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page