The last time Hackerfall tried to access this page, it returned a not found error. A cached version of the page is below, or click here to continue anyway

3.6 Announcement - Django REST framework

The 3.6 release adds two major new features to REST framework.

  1. Built-in interactive API documentation support.
  2. A new JavaScript client library.

Above: The interactive API documentation.

The 3.6 release would not have been possible without our backing from Mozilla to the project, and our collaborative funding model.

If you use REST framework commercially and would like to see this work continue, we strongly encourage you to invest in its continued development by signing up for a paid plan.

Many thanks to all our sponsors, and in particular to our premium backers, Rover, Sentry, Stream, Machinalis, Rollbar, and MicroPyramid.

REST framework's new API documentation supports a number of features:

The coreapi library is required as a dependancy for the API docs. Make sure to install the latest version (2.3.0 or above). The pygments and markdown libraries are optional but recommended.

To install the API documentation, you'll need to include it in your projects URLconf:

from rest_framework.documentation import include_docs_urls

API_TITLE = 'API title'

urlpatterns = [
    url(r'^docs/', include_docs_urls(title=API_TITLE, description=API_DESCRIPTION))

Once installed you should see something a little like this:

We'll likely be making further refinements to the API documentation over the coming weeks. Keep in mind that this is a new feature, and please do give us feedback if you run into any issues or limitations.

For more information on documenting your API endpoints see the "Documenting your API" section.

The JavaScript client library allows you to load an API schema, and then interact with that API at an application layer interface, rather than constructing fetch requests explicitly.

Here's a brief example that demonstrates:


        <script src="/static/rest_framework/js/coreapi-0.1.0.js"></script>
        <script src="/docs/schema.js"></script>
            const coreapi = window.coreapi
            const schema = window.schema

            // Instantiate a client...
            let auth = coreapi.auth.TokenAuthentication({scheme: 'JWT', token: 'xxx'})
            let client = coreapi.Client({auth: auth})

            // Make an API request...
            client.action(schema, ['projects', 'list']).then(function(result) {

The JavaScript client library supports various authentication schemes, and can be used by your project itself, or as an external client interacting with your API.

The client is not limited to usage with REST framework APIs, although it does currently only support loading CoreJSON API schemas. Support for Swagger and other API schemas is planned.

For more details see the JavaScript client library documentation.

Previous authentication support in the Python client library was limited to allowing users to provide explicit header values.

We now have better support for handling the details of authentication, with the introduction of the BasicAuthentication, TokenAuthentication, and SessionAuthentication schemes.

You can include the authentication scheme when instantiating a new client.

auth = coreapi.auth.TokenAuthentication(scheme='JWT', token='xxx-xxx-xxx')
client = coreapi.Client(auth=auth)

For more information see the Python client library documentation.

If you're using REST framework's schema generation, or want to use the API docs, then you'll need to update to the latest version of coreapi. (2.3.0)

The 3.5 "pending deprecation" of router arguments for generating a schema view, such as schema_title, schema_url and schema_renderers, have now been escalated to a "deprecated" warning.

Instead of using DefaultRouter(schema_title='Example API'), you should use the get_schema_view() function, and include the view explicitly in your URL conf.

The 3.5 "pending deprecation" warning of the built-in DjangoFilterBackend has now been escalated to a "deprecated" warning.

You should change your imports and REST framework filter settings as follows:

There are likely to be a number of refinements to the API documentation and JavaScript client library over the coming weeks, which could include some of the following:

Once work on those refinements is complete, we'll be starting feature work on realtime support, for the 3.7 release.

Continue reading on