Framework-specific instructions

Django Rest Framework

Django Rest Framework works straight out of the box. Simply add @qval() to your views or use validate() inside.


For Django without DRF you may need to add exception handler to settings.MIDDLEWARE. Qval attempts to do it automatically if DJANO_SETTINGS_MODULE is set. Otherwise you’ll see the following message:

WARNING:root:Unable to add APIException middleware to the MIDDLEWARE list. Django does not
support APIException handling without DRF integration. Define DJANGO_SETTINGS_MODULE or
add 'qval.framework_integration.HandleAPIExceptionDjango' to the MIDDLEWARE list.

Take a look at the plain Django example here.


If you are using Flask, you will need to setup exception handlers:

from flask import Flask
from qval.framework_integration import setup_flask_error_handlers
app = Flask(__name__)

Since request in Flask is a global object, you may want to curry @qval() before usage:

from flask import request
from qval import qval_curry

# Firstly, curry `qval()`
qval = qval_curry(request)

# Then use it as a decorator.
# Note: you view now must accept request as first argument
def view(request, params):

Check out the full Flask example. You can run the example using the command below:

$ PYTHONPATH=. FLASK_APP=examples/ flask run


Similarly to Flask, with Falcon you will need to setup error handlers:

import falcon
from qval.framework_integration import setup_falcon_error_handlers
app = falcon.API()

Full Falcon example can be found in the github repository.

Use the following command to run the app:

$ PYTHONPATH=. python examples/