Skip to main content

Django middleware to compress responses with gzip, brotli and zstd.

Project description

PyPI - Version PyPI - Python Version PyPI - Versions from Framework Classifiers PyPI - License

Dj Compression Middleware

Note: This project and repo was originally a fork of the project django-compression-middleware. As the project did not seem maintained anymore, I forked the project in order to get some open PR's and issues resolved. Credit goes to the original creator: Friedel Wolff. In the meantime I have refactored a lot of the code.

This package provides Django middleware to compress responses with gzip, brotli, or zstd. It is a replacement of Django's built-in GZipMiddleware as it supports more compression algorithms. Both normal and streaming responses get compressed.

Compression of responses happens at runtime, if you are looking to compress your static assets, look at e.g. Django-compressor, WhiteNoise.

The middleware looks at a requests' Accept-Encoding header in order to select appropriate compression. It will choose one using this order of preference:

  • Zstandard (zstd)
  • Brotli (br)
  • gzip (gzip)

Installation and usage

Install the package:

uv add dj-compression-middleware
# or
pip install dj-compression-middleware

Add dj_compression_middleware.middleware.CompressionMiddleware to your middleware:

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

Remove GZipMiddleware and BrotliMiddleware if they were present, as this middleware replaces them.

Excluding views from compression

When you want to disable compression for a single view, it can be done like this for either a function-based or class-based view:

from dj_compression_middleware import no_compress, NoCompressMixin

@no_compress
def index_view(request):
    ...


class MyView(NoCompressMixin, View):
    ...

Customizing the middleware

You can subclass the middleware and customize some attributes of it to tweak its behaviour, e.g. to select the compression level:

class CustomCompressionMiddleware(CompressionMiddleware):
    # Tweak compression settings
    ZSTD_LEVEL = 7
    BROTLI_QUALITY = 4
    GZIP_COMPRESSLEVEL = 6

For even more customization, you can override the init method and modify the COMPRESSORS to an ordered set of your own preferred compression algorithms.

Development

Setup a virtual environment:

uv sync --frozen --all-extras --all-groups

Run linting:

uv run ruff check --no-fix
uv run ty check

Run the tests:

uv run pytest

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

dj_compression_middleware-0.0.5.tar.gz (7.7 kB view details)

Uploaded Source

Built Distribution

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

dj_compression_middleware-0.0.5-py3-none-any.whl (9.3 kB view details)

Uploaded Python 3

File details

Details for the file dj_compression_middleware-0.0.5.tar.gz.

File metadata

  • Download URL: dj_compression_middleware-0.0.5.tar.gz
  • Upload date:
  • Size: 7.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for dj_compression_middleware-0.0.5.tar.gz
Algorithm Hash digest
SHA256 c1af60be2103e3e35c114713c1bd39fe179ce19edfea0450159b5747ce2623b5
MD5 f3abc8f0846863c7ea14a5eeb988b0ba
BLAKE2b-256 4b2508ca89e141d6679e5ffe5a4a22c6689364e6711e3407bf71a41b56e51b43

See more details on using hashes here.

File details

Details for the file dj_compression_middleware-0.0.5-py3-none-any.whl.

File metadata

  • Download URL: dj_compression_middleware-0.0.5-py3-none-any.whl
  • Upload date:
  • Size: 9.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for dj_compression_middleware-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 3980fb888b59c0acf793fd1a28c8188f8ab551a5925cf5573dd45d674f0322c7
MD5 79adf1d2e139cd7e096697c5b6ceb34b
BLAKE2b-256 b066f1907bcccb6fa7cca739fbbea5988e4cff6beaa594550bfa57dca36612fc

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