Flask-Compress

Flask-Compress allows you to easily compress your Flask application’s responses with gzip.

The preferred solution is to have a server (like Nginx) automatically compress the static files for you. If you don’t have that option Flask-Compress will solve the problem for you.

How it works

Flask-Compress both adds the various headers required for a compressed response and gzips the response data. This makes serving gzip compressed static files extremely easy.

Internally, every time a request is made the extension will check if it matches one of the compressable mimetypes and automatically attach the appropriate headers.

Installation

If you use pip then installation is simply:

$ pip install flask-compress

or, if you want the latest github version:

$ pip install git+git://github.com/wichitacode/flask-compress.git

You can also install Flask-Compress via Easy Install:

$ easy_install flask-compress

Dependencies

There are no additional dependencies besides Flask itself.

Using Flask-Compress

Flask-Compress is incredibly simple to use. In order to start gzip’ing your Flask application’s assets, the first thing to do is let Flask-Compress know about your flask.Flask application object.

from flask import Flask
from flask.ext.compress import Compress

app = Flask(__name__)
Compress(app)

In many cases, however, one cannot expect a Flask instance to be ready at import time, and a common pattern is to return a Flask instance from within a function only after other configuration details have been taken care of. In these cases, Flask-Compress provides a simple function, init_app, which takes your application as an argument.

from flask import Flask
from flask.ext.compress import Compress

compress = Compress()

def start_app():
    app = Flask(__name__)
    compress.init_app(app)
    return app

In terms of automatically compressing your assets using gzip, passing your Flask object to the Compress object is all that needs to be done.

Flask-Compress Options

Within your Flask application’s settings you can provide the following settings to control the behaviour of Flask-Compress. None of the settings are required.

COMPRESS_MIMETYPES Set the list of mimetypes to compress here. Default: ['text/html', 'text/css', 'text/xml', 'application/json', 'application/javascript']
COMPRESS_LEVEL Specifies the gzip compression level. Default: 6
COMPRESS_MIN_SIZE Specifies the minimum file size threshold for compressing files. Default: 500
COMPRESS_DEBUG By default, Flask-Compress will be switched off when running your application in debug mode, so that your responses are not compressed. If you wish to enable Flask-Compress in debug mode, set this value to True. Default: False

API Documentation

Flask-Compress is a very simple extension. The few exposed objects, methods and functions are as follows.

The Compress Object

class flask_compress.Compress(app=None)[source]

The Compress object allows your application to use Flask-Compress.

When initialising a Compress object you may optionally provide your flask.Flask application object if it is ready. Otherwise, you may provide it later by using the init_app() method.

Parameters:app (flask.Flask or None) – optional flask.Flask application object
init_app(app)[source]
after_request(response)[source]
Fork me on GitHub