diff --git a/.travis.yml b/.travis.yml index cd87dd339..7a91af809 100644 --- a/.travis.yml +++ b/.travis.yml @@ -35,7 +35,6 @@ matrix: allow_failures: - env: DJANGO=master - - env: DJANGO=1.11 install: - pip install tox tox-travis diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 415e42ac0..ba579568d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -50,7 +50,7 @@ Getting involved in triaging incoming issues is a good way to start contributing To start developing on Django REST framework, clone the repo: - git clone git@github.com:tomchristie/django-rest-framework.git + git clone git@github.com:encode/django-rest-framework.git Changes should broadly follow the [PEP 8][pep-8] style conventions, and we recommend you set up your editor to automatically indicate non-conforming styles. @@ -198,10 +198,10 @@ If you want to draw attention to a note or warning, use a pair of enclosing line [code-of-conduct]: https://www.djangoproject.com/conduct/ [google-group]: https://groups.google.com/forum/?fromgroups#!forum/django-rest-framework [so-filter]: http://stackexchange.com/filters/66475/rest-framework -[issues]: https://github.com/tomchristie/django-rest-framework/issues?state=open +[issues]: https://github.com/encode/django-rest-framework/issues?state=open [pep-8]: http://www.python.org/dev/peps/pep-0008/ [pull-requests]: https://help.github.com/articles/using-pull-requests [tox]: https://tox.readthedocs.io/en/latest/ [markdown]: http://daringfireball.net/projects/markdown/basics -[docs]: https://github.com/tomchristie/django-rest-framework/tree/master/docs +[docs]: https://github.com/encode/django-rest-framework/tree/master/docs [mou]: http://mouapp.com/ diff --git a/LICENSE.md b/LICENSE.md index aca195ec4..4c599a394 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,6 @@ # License -Copyright (c) 2011-2016, Tom Christie +Copyright (c) 2011-2017, Tom Christie All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md index 49f980c93..70673c6c1 100644 --- a/PULL_REQUEST_TEMPLATE.md +++ b/PULL_REQUEST_TEMPLATE.md @@ -1,4 +1,4 @@ -*Note*: Before submitting this pull request, please review our [contributing guidelines](https://github.com/tomchristie/django-rest-framework/blob/master/CONTRIBUTING.md#pull-requests). +*Note*: Before submitting this pull request, please review our [contributing guidelines](https://github.com/encode/django-rest-framework/blob/master/CONTRIBUTING.md#pull-requests). ## Description diff --git a/README.md b/README.md index 609f99184..02a20aff2 100644 --- a/README.md +++ b/README.md @@ -21,14 +21,15 @@ The initial aim is to provide a single full-time position on REST framework. *Every single sign-up makes a significant impact towards making that possible.*
-*Many thanks to all our [wonderful sponsors][sponsors], and in particular to our premium backers, [Rover](http://jobs.rover.com/), [Sentry](https://getsentry.com/welcome/), [Stream](https://getstream.io/?utm_source=drf&utm_medium=banner&utm_campaign=drf), [Machinalis](https://hello.machinalis.co.uk/), and [Rollbar](https://rollbar.com).* +*Many thanks to all our [wonderful sponsors][sponsors], and in particular to our premium backers, [Rover](http://jobs.rover.com/), [Sentry](https://getsentry.com/welcome/), [Stream](https://getstream.io/?utm_source=drf&utm_medium=banner&utm_campaign=drf), [Machinalis](https://hello.machinalis.co.uk/), [Rollbar](https://rollbar.com), and [MicroPyramid](https://micropyramid.com/django-rest-framework-development-services/).* --- @@ -53,7 +54,7 @@ There is a live example API for testing purposes, [available here][sandbox]. # Requirements * Python (2.7, 3.2, 3.3, 3.4, 3.5) -* Django (1.8, 1.9, 1.10) +* Django (1.8, 1.9, 1.10, 1.11) # Installation @@ -175,10 +176,10 @@ If you believe you've found something in Django REST framework which has securit Send a description of the issue via email to [rest-framework-security@googlegroups.com][security-mail]. The project maintainers will then work with you to resolve any issues where required, prior to any public disclosure. -[build-status-image]: https://secure.travis-ci.org/tomchristie/django-rest-framework.svg?branch=master -[travis]: http://travis-ci.org/tomchristie/django-rest-framework?branch=master -[coverage-status-image]: https://img.shields.io/codecov/c/github/tomchristie/django-rest-framework/master.svg -[codecov]: http://codecov.io/github/tomchristie/django-rest-framework?branch=master +[build-status-image]: https://secure.travis-ci.org/encode/django-rest-framework.svg?branch=master +[travis]: http://travis-ci.org/encode/django-rest-framework?branch=master +[coverage-status-image]: https://img.shields.io/codecov/c/github/encode/django-rest-framework/master.svg +[codecov]: http://codecov.io/github/encode/django-rest-framework?branch=master [pypi-version]: https://img.shields.io/pypi/v/djangorestframework.svg [pypi]: https://pypi.python.org/pypi/djangorestframework [twitter]: https://twitter.com/_tomchristie diff --git a/codecov.yml b/codecov.yml new file mode 100644 index 000000000..d7436ab05 --- /dev/null +++ b/codecov.yml @@ -0,0 +1,7 @@ +coverage: + status: + project: false + patch: false + changes: false + +comment: off diff --git a/docs/api-guide/authentication.md b/docs/api-guide/authentication.md index 4a01188f3..2344c68e3 100644 --- a/docs/api-guide/authentication.md +++ b/docs/api-guide/authentication.md @@ -356,6 +356,10 @@ HTTP Signature (currently a [IETF draft][http-signature-ietf-draft]) provides a [Django-rest-knox][django-rest-knox] library provides models and views to handle token based authentication in a more secure and extensible way than the built-in TokenAuthentication scheme - with Single Page Applications and Mobile clients in mind. It provides per-client tokens, and views to generate them when provided some other authentication (usually basic authentication), to delete the token (providing a server enforced logout) and to delete all tokens (logs out all clients that a user is logged into). +## drfpasswordless + +[drfpasswordless][drfpasswordless] adds (Medium, Square Cash inspired) passwordless support to Django REST Framework's own TokenAuthentication scheme. Users log in and sign up with a token sent to a contact point like an email address or a mobile number. + [cite]: http://jacobian.org/writing/rest-worst-practices/ [http401]: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.2 [http403]: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.4 @@ -396,3 +400,4 @@ HTTP Signature (currently a [IETF draft][http-signature-ietf-draft]) provides a [django-rest-auth]: https://github.com/Tivix/django-rest-auth [django-rest-framework-social-oauth2]: https://github.com/PhilipGarnero/django-rest-framework-social-oauth2 [django-rest-knox]: https://github.com/James1345/django-rest-knox +[drfpasswordless]: https://github.com/aaronn/django-rest-framework-passwordless diff --git a/docs/api-guide/fields.md b/docs/api-guide/fields.md index 22ce7dd77..28d06f25c 100644 --- a/docs/api-guide/fields.md +++ b/docs/api-guide/fields.md @@ -55,6 +55,8 @@ The `default` is not applied during partial update operations. In the partial up May be set to a function or other callable, in which case the value will be evaluated each time it is used. When called, it will receive no arguments. If the callable has a `set_context` method, that will be called each time before getting the value with the field instance as only argument. This works the same way as for [validators](validators.md#using-set_context). +When serializing the instance, default will be used if the the object attribute or dictionary key is not present in the instance. + Note that setting a `default` value implies that the field is not required. Including both the `default` and `required` keyword arguments is invalid and will raise an error. ### `source` @@ -303,8 +305,6 @@ Format strings may either be [Python strftime formats][strftime] which explicitl When a value of `None` is used for the format `datetime` objects will be returned by `to_representation` and the final output representation will determined by the renderer class. -In the case of JSON this means the default datetime representation uses the [ECMA 262 date time string specification][ecma262]. This is a subset of ISO 8601 which uses millisecond precision, and includes the 'Z' suffix for the UTC timezone, for example: `2013-01-29T12:34:56.123Z`. - #### `auto_now` and `auto_now_add` model fields. When using `ModelSerializer` or `HyperlinkedModelSerializer`, note that any model fields with `auto_now=True` or `auto_now_add=True` will use serializer fields that are `read_only=True` by default. diff --git a/docs/api-guide/filtering.md b/docs/api-guide/filtering.md index 8a23a2ea3..461f3c5ba 100644 --- a/docs/api-guide/filtering.md +++ b/docs/api-guide/filtering.md @@ -142,7 +142,7 @@ Note that you can use both an overridden `.get_queryset()` and generic filtering The `django-filter` library includes a `DjangoFilterBackend` class which supports highly customizable field filtering for REST framework. -To use `DjangoFilterBackend`, first install `django-filter`. +To use `DjangoFilterBackend`, first install `django-filter`. Then add `django_filters` to Django's `INSTALLED_APPS` pip install django-filter @@ -432,8 +432,11 @@ The method should return a rendered HTML string. ## Pagination & schemas You can also make the filter controls available to the schema autogeneration -that REST framework provides, by implementing a `get_schema_fields()` method, -which should return a list of `coreapi.Field` instances. +that REST framework provides, by implementing a `get_schema_fields()` method. This method should have the following signature: + +`get_schema_fields(self, view)` + +The method should return a list of `coreapi.Field` instances. # Third party packages diff --git a/docs/api-guide/generic-views.md b/docs/api-guide/generic-views.md index 606a3787a..ae2705080 100644 --- a/docs/api-guide/generic-views.md +++ b/docs/api-guide/generic-views.md @@ -69,7 +69,7 @@ The following attributes control the basic view behavior. The following attributes are used to control pagination when used with list views. -* `pagination_class` - The pagination class that should be used when paginating list results. Defaults to the same value as the `DEFAULT_PAGINATION_CLASS` setting, which is `'rest_framework.pagination.PageNumberPagination'`. +* `pagination_class` - The pagination class that should be used when paginating list results. Defaults to the same value as the `DEFAULT_PAGINATION_CLASS` setting, which is `'rest_framework.pagination.PageNumberPagination'`. Setting `pagination_class=None` will disable pagination on this view. **Filtering**: diff --git a/docs/api-guide/pagination.md b/docs/api-guide/pagination.md index bc7a5602d..888390018 100644 --- a/docs/api-guide/pagination.md +++ b/docs/api-guide/pagination.md @@ -279,8 +279,11 @@ API responses for list endpoints will now include a `Link` header, instead of in ## Pagination & schemas You can also make the pagination controls available to the schema autogeneration -that REST framework provides, by implementing a `get_schema_fields()` method, -which should return a list of `coreapi.Field` instances. +that REST framework provides, by implementing a `get_schema_fields()` method. This method should have the following signature: + +`get_schema_fields(self, view)` + +The method should return a list of `coreapi.Field` instances. --- diff --git a/docs/api-guide/schemas.md b/docs/api-guide/schemas.md index f43ff56bd..afa058d94 100644 --- a/docs/api-guide/schemas.md +++ b/docs/api-guide/schemas.md @@ -117,7 +117,7 @@ The simplest way to include a schema in your project is to use the Once the view has been added, you'll be able to make API requests to retrieve the auto-generated schema definition. - $ http http://127.0.0.1:8000/ Accept:application/vnd.coreapi+json + $ http http://127.0.0.1:8000/ Accept:application/coreapi+json HTTP/1.0 200 OK Allow: GET, HEAD, OPTIONS Content-Type: application/vnd.coreapi+json @@ -170,6 +170,22 @@ May be used to pass the set of renderer classes that can be used to render the A renderer_classes=[CoreJSONRenderer, APIBlueprintRenderer] ) +#### `patterns` + +List of url patterns to limit the schema introspection to. If you only want the `myproject.api` urls +to be exposed in the schema: + + schema_url_patterns = [ + url(r'^api/', include('myproject.api.urls')), + ] + + schema_view = get_schema_view( + title='Server Monitoring API', + url='https://www.example.org/api/', + patterns=schema_url_patterns, + ) + + ## Using an explicit schema view If you need a little more control than the `get_schema_view()` shortcut gives you, diff --git a/docs/api-guide/serializers.md b/docs/api-guide/serializers.md index e157845a9..a3f7fdcc1 100644 --- a/docs/api-guide/serializers.md +++ b/docs/api-guide/serializers.md @@ -1100,8 +1100,6 @@ This API included the `.get_field()`, `.get_pk_field()` and other methods. Because the serializers have been fundamentally redesigned with 3.0 this API no longer exists. You can still modify the fields that get created but you'll need to refer to the source code, and be aware that if the changes you make are against private bits of API then they may be subject to change. -A new interface for controlling this behavior is currently planned for REST framework 3.1. - --- # Third party packages @@ -1159,6 +1157,9 @@ The [html-json-forms][html-json-forms] package provides an algorithm and seriali [djangorestframework-queryfields][djangorestframework-queryfields] allows API clients to specify which fields will be sent in the response via inclusion/exclusion query parameters. +## DRF Writable Nested + +The [drf-writable-nested][drf-writable-nested] package provides writable nested model serializer which allows to create/update models with nested related data. [cite]: https://groups.google.com/d/topic/django-users/sVFaOfQi4wY/discussion [relations]: relations.md @@ -1179,3 +1180,4 @@ The [html-json-forms][html-json-forms] package provides an algorithm and seriali [drf-base64]: https://bitbucket.org/levit_scs/drf_base64 [drf-serializer-extensions]: https://github.com/evenicoulddoit/django-rest-framework-serializer-extensions [djangorestframework-queryfields]: http://djangorestframework-queryfields.readthedocs.io/ +[drf-writable-nested]: http://github.com/Brogency/drf-writable-nested diff --git a/docs/api-guide/viewsets.md b/docs/api-guide/viewsets.md index e6df17f51..a1666c011 100644 --- a/docs/api-guide/viewsets.md +++ b/docs/api-guide/viewsets.md @@ -235,6 +235,8 @@ You may need to provide custom `ViewSet` classes that do not have the full set o To create a base viewset class that provides `create`, `list` and `retrieve` operations, inherit from `GenericViewSet`, and mixin the required actions: + from rest_framework import mixins + class CreateListRetrieveViewSet(mixins.CreateModelMixin, mixins.ListModelMixin, mixins.RetrieveModelMixin, diff --git a/docs/img/api-docs.gif b/docs/img/api-docs.gif new file mode 100644 index 000000000..6da560b7e Binary files /dev/null and b/docs/img/api-docs.gif differ diff --git a/docs/img/api-docs.png b/docs/img/api-docs.png new file mode 100644 index 000000000..939075a89 Binary files /dev/null and b/docs/img/api-docs.png differ diff --git a/docs/img/books/hwa-cover.png b/docs/img/books/hwa-cover.png new file mode 100644 index 000000000..93d7a3088 Binary files /dev/null and b/docs/img/books/hwa-cover.png differ diff --git a/docs/img/books/tsd-cover.png b/docs/img/books/tsd-cover.png new file mode 100644 index 000000000..5034edfad Binary files /dev/null and b/docs/img/books/tsd-cover.png differ diff --git a/docs/img/premium/micropyramid-readme.png b/docs/img/premium/micropyramid-readme.png new file mode 100644 index 000000000..9fa9500e1 Binary files /dev/null and b/docs/img/premium/micropyramid-readme.png differ diff --git a/docs/index.md b/docs/index.md index 1760ce916..9bf36cce7 100644 --- a/docs/index.md +++ b/docs/index.md @@ -18,10 +18,10 @@
-
+
-
-
+
+
@@ -67,8 +67,7 @@ REST framework is a *collaboratively funded project*. If you use
REST framework commercially we strongly encourage you to invest in its
continued development by **[signing up for a paid plan][funding]**.
-The initial aim is to provide a single full-time position on REST framework.
-*Every single sign-up makes a significant impact towards making that possible.*
+*Every single sign-up helps us make REST framework long-term financially sustainable.*
-*Many thanks to all our [wonderful sponsors][sponsors], and in particular to our premium backers, [Rover](http://jobs.rover.com/), [Sentry](https://getsentry.com/welcome/), [Stream](https://getstream.io/?utm_source=drf&utm_medium=banner&utm_campaign=drf), [Machinalis](https://hello.machinalis.co.uk/), and [Rollbar](https://rollbar.com).*
+*Many thanks to all our [wonderful sponsors][sponsors], and in particular to our premium backers, [Rover](http://jobs.rover.com/), [Sentry](https://getsentry.com/welcome/), [Stream](https://getstream.io/?utm_source=drf&utm_medium=banner&utm_campaign=drf), [Machinalis](https://hello.machinalis.co.uk/), [Rollbar](https://rollbar.com), and [MicroPyramid](https://micropyramid.com/django-rest-framework-development-services/).*
---
@@ -88,13 +88,13 @@ The initial aim is to provide a single full-time position on REST framework.
REST framework requires the following:
* Python (2.7, 3.2, 3.3, 3.4, 3.5)
-* Django (1.8, 1.9, 1.10)
+* Django (1.8, 1.9, 1.10, 1.11)
The following packages are optional:
* [coreapi][coreapi] (1.32.0+) - Schema generation support.
* [Markdown][markdown] (2.1.0+) - Markdown support for the browsable API.
-* [django-filter][django-filter] (0.9.2+) - Filtering support.
+* [django-filter][django-filter] (1.0.1+) - Filtering support.
* [django-crispy-forms][django-crispy-forms] - Improved HTML display for filtering.
* [django-guardian][django-guardian] (1.1.1+) - Object level permissions support.
@@ -108,7 +108,7 @@ Install using `pip`, including any optional packages you want...
...or clone the project from github.
- git clone git@github.com:tomchristie/django-rest-framework.git
+ git clone git@github.com:encode/django-rest-framework.git
Add `'rest_framework'` to your `INSTALLED_APPS` setting.
@@ -237,7 +237,8 @@ General guides to using REST framework.
* [Browser enhancements][browser-enhancements]
* [The Browsable API][browsableapi]
* [REST, Hypermedia & HATEOAS][rest-hypermedia-hateoas]
-* [Third Party Resources][third-party-resources]
+* [Third Party Packages][third-party-packages]
+* [Tutorials and Resources][tutorials-and-resources]
* [Contributing to REST framework][contributing]
* [Project management][project-management]
* [3.0 Announcement][3.0-announcement]
@@ -246,10 +247,12 @@ General guides to using REST framework.
* [3.3 Announcement][3.3-announcement]
* [3.4 Announcement][3.4-announcement]
* [3.5 Announcement][3.5-announcement]
+* [3.6 Announcement][3.6-announcement]
* [Kickstarter Announcement][kickstarter-announcement]
* [Mozilla Grant][mozilla-grant]
* [Funding][funding]
* [Release Notes][release-notes]
+* [Jobs][jobs]
## Development
@@ -276,7 +279,7 @@ Send a description of the issue via email to [rest-framework-security@googlegrou
## License
-Copyright (c) 2011-2016, Tom Christie
+Copyright (c) 2011-2017, Tom Christie
All rights reserved.
Redistribution and use in source and binary forms, with or without
@@ -307,8 +310,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
[markdown]: http://pypi.python.org/pypi/Markdown/
[django-filter]: http://pypi.python.org/pypi/django-filter
[django-crispy-forms]: https://github.com/maraujop/django-crispy-forms
-[django-guardian]: https://github.com/lukaszb/django-guardian
-[0.4]: https://github.com/tomchristie/django-rest-framework/tree/0.4.X
+[django-guardian]: https://github.com/django-guardian/django-guardian
+[0.4]: https://github.com/encode/django-rest-framework/tree/0.4.X
[image]: img/quickstart.png
[index]: .
[oauth1-section]: api-guide/authentication/#django-rest-framework-oauth
@@ -366,17 +369,20 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
[rest-hypermedia-hateoas]: topics/rest-hypermedia-hateoas.md
[contributing]: topics/contributing.md
[project-management]: topics/project-management.md
-[third-party-resources]: topics/third-party-resources.md
+[third-party-packages]: topics/third-party-packages.md
+[tutorials-and-resources]: topics/tutorials-and-resources.md
[3.0-announcement]: topics/3.0-announcement.md
[3.1-announcement]: topics/3.1-announcement.md
[3.2-announcement]: topics/3.2-announcement.md
[3.3-announcement]: topics/3.3-announcement.md
[3.4-announcement]: topics/3.4-announcement.md
[3.5-announcement]: topics/3.5-announcement.md
+[3.6-announcement]: topics/3.6-announcement.md
[kickstarter-announcement]: topics/kickstarter-announcement.md
[mozilla-grant]: topics/mozilla-grant.md
[funding]: topics/funding.md
[release-notes]: topics/release-notes.md
+[jobs]: topics/jobs.md
[tox]: http://testrun.org/tox/latest/
diff --git a/docs/topics/2.2-announcement.md b/docs/topics/2.2-announcement.md
index ca4ed2efa..2d743af24 100644
--- a/docs/topics/2.2-announcement.md
+++ b/docs/topics/2.2-announcement.md
@@ -155,5 +155,5 @@ From version 2.2 onwards, serializers with hyperlinked relationships *always* re
[mailing-list]: https://groups.google.com/forum/?fromgroups#!forum/django-rest-framework
[django-rest-framework-docs]: https://github.com/marcgibbons/django-rest-framework-docs
[marcgibbons]: https://github.com/marcgibbons/
-[issues]: https://github.com/tomchristie/django-rest-framework/issues
-[564]: https://github.com/tomchristie/django-rest-framework/issues/564
+[issues]: https://github.com/encode/django-rest-framework/issues
+[564]: https://github.com/encode/django-rest-framework/issues/564
diff --git a/docs/topics/2.4-announcement.md b/docs/topics/2.4-announcement.md
index 96f68c865..8bbe61335 100644
--- a/docs/topics/2.4-announcement.md
+++ b/docs/topics/2.4-announcement.md
@@ -167,6 +167,6 @@ Once again, many thanks to all the generous [backers and sponsors][kickstarter-s
[view-name-and-description-settings]: ../api-guide/settings#view-names-and-descriptions
[client-ip-identification]: ../api-guide/throttling#how-clients-are-identified
[2-3-announcement]: 2.3-announcement
-[github-labels]: https://github.com/tomchristie/django-rest-framework/issues
-[github-milestones]: https://github.com/tomchristie/django-rest-framework/milestones
+[github-labels]: https://github.com/encode/django-rest-framework/issues
+[github-milestones]: https://github.com/encode/django-rest-framework/milestones
[kickstarter-sponsors]: kickstarter-announcement#sponsors
diff --git a/docs/topics/3.0-announcement.md b/docs/topics/3.0-announcement.md
index f09788f56..25c36b2ca 100644
--- a/docs/topics/3.0-announcement.md
+++ b/docs/topics/3.0-announcement.md
@@ -957,9 +957,9 @@ The 3.1 release is planned to address improvements in the following components:
The 3.2 release is planned to introduce an alternative admin-style interface to the browsable API.
-You can follow development on the GitHub site, where we use [milestones to indicate planning timescales](https://github.com/tomchristie/django-rest-framework/milestones).
+You can follow development on the GitHub site, where we use [milestones to indicate planning timescales](https://github.com/encode/django-rest-framework/milestones).
[kickstarter]: http://kickstarter.com/projects/tomchristie/django-rest-framework-3
[sponsors]: http://www.django-rest-framework.org/topics/kickstarter-announcement/#sponsors
-[mixins.py]: https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/mixins.py
+[mixins.py]: https://github.com/encode/django-rest-framework/blob/master/rest_framework/mixins.py
[django-localization]: https://docs.djangoproject.com/en/stable/topics/i18n/translation/#localization-how-to-create-language-files
diff --git a/docs/topics/3.2-announcement.md b/docs/topics/3.2-announcement.md
index dc439f110..8500a9892 100644
--- a/docs/topics/3.2-announcement.md
+++ b/docs/topics/3.2-announcement.md
@@ -8,7 +8,7 @@ This interface is intended to act as a more user-friendly interface to the API.
We've also fixed a huge number of issues, and made numerous cleanups and improvements.
-Over the course of the 3.1.x series we've [resolved nearly 600 tickets](https://github.com/tomchristie/django-rest-framework/issues?utf8=%E2%9C%93&q=closed%3A%3E2015-03-05) on our GitHub issue tracker. This means we're currently running at a rate of **closing around 100 issues or pull requests per month**.
+Over the course of the 3.1.x series we've [resolved nearly 600 tickets](https://github.com/encode/django-rest-framework/issues?utf8=%E2%9C%93&q=closed%3A%3E2015-03-05) on our GitHub issue tracker. This means we're currently running at a rate of **closing around 100 issues or pull requests per month**.
None of this would have been possible without the support of our wonderful Kickstarter backers. If you're looking for a job in Django development we'd strongly recommend taking [a look through our sponsors](http://www.django-rest-framework.org/topics/kickstarter-announcement/#sponsors) and finding out who's hiring.
diff --git a/docs/topics/3.3-announcement.md b/docs/topics/3.3-announcement.md
index d1a8f4da0..44e8dd511 100644
--- a/docs/topics/3.3-announcement.md
+++ b/docs/topics/3.3-announcement.md
@@ -53,6 +53,6 @@ The following pagination view attributes and settings have been moved into attri
The `ModelSerializer` and `HyperlinkedModelSerializer` classes should now include either a `fields` or `exclude` option, although the `fields = '__all__'` shortcut may be used. Failing to include either of these two options is currently pending deprecation, and will be removed entirely in the 3.5 release. This behavior brings `ModelSerializer` more closely in line with Django's `ModelForm` behavior.
[forms-api]: html-and-forms.md
-[ajax-form]: https://github.com/tomchristie/ajax-form
+[ajax-form]: https://github.com/encode/ajax-form
[jsonfield]: ../../api-guide/fields#jsonfield
[django-supported-versions]: https://www.djangoproject.com/download/#supported-versions
\ No newline at end of file
diff --git a/docs/topics/3.4-announcement.md b/docs/topics/3.4-announcement.md
index 438192c9c..7db145600 100644
--- a/docs/topics/3.4-announcement.md
+++ b/docs/topics/3.4-announcement.md
@@ -188,7 +188,7 @@ The full set of itemized release notes [are available here][release-notes].
[tut-7]: ../../tutorial/7-schemas-and-client-libraries/
[schema-generation]: ../../api-guide/schemas/
[api-clients]: api-clients.md
-[milestone]: https://github.com/tomchristie/django-rest-framework/milestone/35
+[milestone]: https://github.com/encode/django-rest-framework/milestone/35
[release-notes]: release-notes#34
[metadata]: ../../api-guide/metadata/#custom-metadata-classes
-[gh3751]: https://github.com/tomchristie/django-rest-framework/issues/3751
+[gh3751]: https://github.com/encode/django-rest-framework/issues/3751
diff --git a/docs/topics/3.5-announcement.md b/docs/topics/3.5-announcement.md
index ea50b2418..701ab48eb 100644
--- a/docs/topics/3.5-announcement.md
+++ b/docs/topics/3.5-announcement.md
@@ -261,6 +261,6 @@ in version 3.3 and raised a deprecation warning in 3.4. Its usage is now mandato
[schema-generation-api]: ../api-guide/schemas/#schemagenerator
[schema-docs]: ../api-guide/schemas/#schemas-as-documentation
[schema-view]: ../api-guide/schemas/#the-get_schema_view-shortcut
-[django-rest-raml]: https://github.com/tomchristie/django-rest-raml
+[django-rest-raml]: https://github.com/encode/django-rest-raml
[raml-image]: ../img/raml.png
[raml-codec]: https://github.com/core-api/python-raml-codec
diff --git a/docs/topics/3.6-announcement.md b/docs/topics/3.6-announcement.md
new file mode 100644
index 000000000..fc3526d00
--- /dev/null
+++ b/docs/topics/3.6-announcement.md
@@ -0,0 +1,199 @@
+
+
+# Django REST framework 3.6
+
+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.*
+
+---
+
+## Funding
+
+The 3.6 release would not have been possible without our [backing from Mozilla](mozilla-grant.md) to the project, and our [collaborative funding model][funding].
+
+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][funding]**.
+
+
+
+
+
+*Many thanks to all our [sponsors][sponsors], and in particular to our premium backers, [Rover](http://jobs.rover.com/), [Sentry](https://getsentry.com/welcome/), [Stream](https://getstream.io/?utm_source=drf&utm_medium=banner&utm_campaign=drf), [Machinalis](https://hello.machinalis.co.uk/), [Rollbar](https://rollbar.com), and [MicroPyramid](https://micropyramid.com/django-rest-framework-development-services/).*
+
+---
+
+## Interactive API documentation
+
+REST framework's new API documentation supports a number of features:
+
+* Live API interaction.
+* Support for various authentication schemes.
+* Code snippets for the Python, JavaScript, and Command Line clients.
+
+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'
+ API_DESCRIPTION = '...'
+
+ 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"][api-docs] section.
+
+---
+
+## JavaScript client library
+
+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:
+
+* Loading the client library and schema.
+* Instantiating an authenticated client.
+* Making an API request using the client.
+
+**index.html**
+
+
+
+
+
+
+
+
+
+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][js-docs].
+
+## Authentication classes for the Python client library
+
+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][py-docs].
+
+---
+
+## Deprecations
+
+### Updating coreapi
+
+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)
+
+### Generating schemas from Router
+
+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.
+
+### DjangoFilterBackend
+
+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:
+
+* `rest_framework.filters.DjangoFilterBackend` becomes `django_filters.rest_framework.DjangoFilterBackend`.
+* `rest_framework.filters.FilterSet` becomes `django_filters.rest_framework.FilterSet`.
+
+---
+
+## What's next
+
+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:
+
+* Support for private API docs, requiring login.
+* File upload and download support in the JavaScript client & API docs.
+* Comprehensive documentation for the JavaScript client library.
+* Automatically including authentication details in the API doc code snippets.
+* Adding authentication support in the command line client.
+* Support for loading Swagger and other schemas in the JavaScript client.
+* Improved support for documenting parameter schemas and response schemas.
+* Refining the API documentation interaction modal.
+
+Once work on those refinements is complete, we'll be starting feature work
+on realtime support, for the 3.7 release.
+
+[sponsors]: https://fund.django-rest-framework.org/topics/funding/#our-sponsors
+[funding]: funding.md
+[api-docs]: documenting-your-api.md
+[js-docs]: api-clients.md#javascript-client-library
+[py-docs]: api-clients.md#python-client-library
diff --git a/docs/topics/api-clients.md b/docs/topics/api-clients.md
index fa7b60d3e..6e0df69e5 100644
--- a/docs/topics/api-clients.md
+++ b/docs/topics/api-clients.md
@@ -240,9 +240,59 @@ Once we have a `Client` instance, we can fetch an API schema from the network.
schema = client.get('https://api.example.org/')
The object returned from this call will be a `Document` instance, which is
-the internal representation of the interface that we are interacting with.
+a representation of the API schema.
-Now that we have our schema `Document`, we can now start to interact with the API:
+## Authentication
+
+Typically you'll also want to provide some authentication credentials when
+instantiating the client.
+
+#### Token authentication
+
+The `TokenAuthentication` class can be used to support REST framework's built-in
+`TokenAuthentication`, as well as OAuth and JWT schemes.
+
+ auth = coreapi.auth.TokenAuthentication(
+ scheme='JWT'
+ token='