/quart

Quart is a Python asyncio web microframework with the same API as Flask.

Primary LanguagePythonMIT LicenseMIT

Quart

Quart logo

Build Status docs pypi http python license chat

Quart is a Python web microframework based on Asyncio. It is intended to provide the easiest way to use the asyncio functionality in a web context, especially with existing Flask apps. This is possible as Quart has the same API as Flask.

Quart aims to be a complete web microframework, as it supports HTTP/1.1, HTTP/2 and websockets. Quart also aims to be very extendable and works with many of the Flask extensions, (hopefully Quart specific extensions will be written soon).

Quickstart

Quart can be installed via pipenv or pip,

$ pipenv install quart
$ pip install quart

and requires Python 3.6.1 or higher.

A minimal Quart example is,

from quart import Quart, websocket

app = Quart(__name__)

@app.route('/')
async def hello():
    return 'hello'

@app.websocket('/ws')
async def ws():
    while True:
        await websocket.send('hello')

app.run()

if the above is in a file called app.py it can be run as,

$ python app.py

To deploy in a production setting see the deployment documentation.

Features

Quart has all the features required to serve webpages over HTTP. For those of you familar with Flask, Quart extends the Flask-API by adding support for,

  • HTTP/1.1 chunked transfer-encoded requests and pipelining.
  • Websockets.
  • HTTP/2, including the ability to server push.

Contributing

Quart is developed on GitLab. You are very welcome to open issues or propose merge requests.

Testing

The best way to test Quart is with Tox,

$ pipenv install tox
$ tox

this will check the code style and run the tests.

Help

The Quart documentation is the best place to start, after that try opening an issue.

API Compatibility with Flask

The Flask API can be described as consisting of the Flask public and private APIs and Werkzeug upon which Flask is based. Quart is designed to be fully compatible with the Flask public API (aside from async and await keywords). Thereafter the aim is to be mostly compatible with the Flask private API and to provide no guarantees about the Werkzeug API.

Migrating from Flask

It should be possible to migrate to Quart from Flask by a find and replace of flask to quart and then adding async and await keywords. See the docs for full details.