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
ZLIB_COMPRESSLEVEL = 8
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
Metadata
Release files for dj_compression_middleware 0.0.8
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| dj_compression_middleware-0.0.8.tar.gz | 8.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dj_compression_middleware-0.0.8-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 18.5 kB
Release files / dj_compression_middleware-0.0.8.tar.gz
| Download URL | dj_compression_middleware-0.0.8.tar.gz |
|---|---|
| Size | 8.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d36006d41d961d587760742ab1c3864f08c69d1f91e1673f1c6344742f1dd087
|
|
BLAKE2b-256 checksum How to use checksums |
0a2ca66c639b57262351afdf91fb5411362b9a8f7991ba89bcb13db5abcac43b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.20 {"installer":{"name":"uv","version":"0.12.20","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}
|
Release files / dj_compression_middleware-0.0.8-py3-none-any.whl
| Download URL | dj_compression_middleware-0.0.8-py3-none-any.whl |
|---|---|
| Size | 10.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
eca2fea13d9ef7129d230a5d7ea52a090875b26805fa8b145bf85ff41e9d8545
|
|
BLAKE2b-256 checksum How to use checksums |
d0f5360870fdd45f29e23cc2fcb5764676dd35dfd9cc71640189445955ba0f43
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.20 {"installer":{"name":"uv","version":"0.12.20","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}
|