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. + +![API Documentation](/img/api-docs.gif) + +*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: + +![API Documentation](/img/api-docs.png) + +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='' + ) + client = coreapi.Client(auth=auth) + +When using TokenAuthentication you'll probably need to implement a login flow +using the CoreAPI client. + +A suggested pattern for this would be to initially make an unauthenticated client +request to an "obtain token" endpoint + +For example, using the "Django REST framework JWT" package + + client = coreapi.Client() + schema = client.get('https://api.example.org/') + + action = ['api-token-auth', 'obtain-token'] + params = {username: "example", email: "example@example.com"} + result = client.action(schema, action, params) + + auth = coreapi.auth.TokenAuthentication( + scheme='JWT', + token=result['token'] + ) + client = coreapi.Client(auth=auth) + +#### Basic authentication + +The `BasicAuthentication` class can be used to support HTTP Basic Authentication. + + auth = coreapi.auth.BasicAuthentication( + username='', + password='' + ) + client = coreapi.Client(auth=auth) + +## Interacting with the API + +Now that we have a client and have fetched our schema `Document`, we can now +start to interact with the API: users = client.action(schema, ['users', 'list']) @@ -304,7 +354,7 @@ other protocols can also be supported. #### Configuring transports -The behaviour of the network layer can be customized by configuring the +The behavior of the network layer can be customized by configuring the transports that the client is instantiated with. import requests @@ -318,6 +368,158 @@ More complex customizations can also be achieved, for example modifying the underlying `requests.Session` instance to [attach transport adaptors][transport-adaptors] that modify the outgoing requests. +--- + +# JavaScript Client Library + +The JavaScript client library allows you to interact with your API either from a browser, or using node. + +## Installing the JavaScript client + +There are two separate JavaScript resources that you need to include in your HTML pages in order to use the JavaScript client library. These are a static `coreapi.js` file, which contains the code for the dynamic client library, and a templated `schema.js` resource, which exposes your API schema. + +First, install the API documentation views. These will include the schema resource that'll allow you to load the schema directly from an HTML page, without having to make an asynchronous AJAX call. + + from rest_framework.documentation import include_docs_urls + + urlpatterns = [ + ... + url(r'^docs/', include_docs_urls(title='My API service')) + ] + +Once the API documentation URLs are installed, you'll be able to include both the required JavaScript resources. Note that the ordering of these two lines is important, as the schema loading requires CoreAPI to already be installed. + + + {% load staticfiles %} + + + +The `coreapi` library, and the `schema` object will now both be available on the `window` instance. + + const coreapi = window.coreapi + const schema = window.schema + +## Instantiating a client + +In order to interact with the API you'll need a client instance. + + var client = coreapi.Client() + +Typically you'll also want to provide some authentication credentials when +instantiating the client. + +#### Session authentication + +The `SessionAuthentication` class allows session cookies to provide the user +authentication. You'll want to provide a standard HTML login flow, to allow +the user to login, and then instantiate a client using session authentication: + + let auth = coreapi.auth.SessionAuthentication({ + csrfCookieName: 'csrftoken', + csrfHeaderName: 'X-CSRFToken' + }) + let client = coreapi.Client({auth: auth}) + +The authentication scheme will handle including a CSRF header in any outgoing +requests for unsafe HTTP methods. + +#### Token authentication + +The `TokenAuthentication` class can be used to support REST framework's built-in +`TokenAuthentication`, as well as OAuth and JWT schemes. + + let auth = coreapi.auth.TokenAuthentication({ + scheme: 'JWT' + token: '' + }) + let client = coreapi.Client({auth: auth}) + +When using TokenAuthentication you'll probably need to implement a login flow +using the CoreAPI client. + +A suggested pattern for this would be to initially make an unauthenticated client +request to an "obtain token" endpoint + +For example, using the "Django REST framework JWT" package + + // Setup some globally accessible state + window.client = coreapi.Client() + window.loggedIn = false + + function loginUser(username, password) { + let action = ["api-token-auth", "obtain-token"] + let params = {username: "example", email: "example@example.com"} + client.action(schema, action, params).then(function(result) { + // On success, instantiate an authenticated client. + let auth = window.coreapi.auth.TokenAuthentication({ + scheme: 'JWT', + token: result['token'] + }) + window.client = coreapi.Client({auth: auth}) + window.loggedIn = true + }).catch(function (error) { + // Handle error case where eg. user provides incorrect credentials. + }) + } + +#### Basic authentication + +The `BasicAuthentication` class can be used to support HTTP Basic Authentication. + + let auth = coreapi.auth.BasicAuthentication({ + username: '', + password: '' + }) + let client = coreapi.Client({auth: auth}) + +## Using the client + +Making requests: + + let action = ["users", "list"] + client.action(schema, action).then(function(result) { + // Return value is in 'result' + }) + +Including parameters: + + let action = ["users", "create"] + let params = {username: "example", email: "example@example.com"} + client.action(schema, action, params).then(function(result) { + // Return value is in 'result' + }) + +Handling errors: + + client.action(schema, action, params).then(function(result) { + // Return value is in 'result' + }).catch(function (error) { + // Error value is in 'error' + }) + +## Installation with node + +The coreapi package is available on NPM. + + $ npm install coreapi + $ node + const coreapi = require('coreapi') + +You'll either want to include the API schema in your codebase directly, by copying it from the `schema.js` resource, or else load the schema asynchronously. For example: + + let client = new coreapi.Client() + let schema = null + client.get("https://api.example.org/").then(function(data) { + // Load a CoreJSON API schema. + schema = data + console.log('schema loaded') + }) + [heroku-api]: https://devcenter.heroku.com/categories/platform-api [heroku-example]: http://www.coreapi.org/tools-and-resources/example-services/#heroku-json-hyper-schema [core-api]: http://www.coreapi.org/ diff --git a/docs/topics/browser-enhancements.md b/docs/topics/browser-enhancements.md index e1977e826..6c1ad83be 100644 --- a/docs/topics/browser-enhancements.md +++ b/docs/topics/browser-enhancements.md @@ -81,7 +81,7 @@ was later [dropped from the spec][html5]. There remains as well as how to support content types other than form-encoded data. [cite]: http://www.amazon.com/Restful-Web-Services-Leonard-Richardson/dp/0596529260 -[ajax-form]: https://github.com/tomchristie/ajax-form +[ajax-form]: https://github.com/encode/ajax-form [rails]: http://guides.rubyonrails.org/form_helpers.html#how-do-forms-with-put-or-delete-methods-work [html5]: http://www.w3.org/TR/html5-diff/#changes-2010-06-24 [put_delete]: http://amundsen.com/examples/put-delete-forms/ diff --git a/docs/topics/contributing.md b/docs/topics/contributing.md index ed7717ae2..9a413832f 100644 --- a/docs/topics/contributing.md +++ b/docs/topics/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. @@ -202,11 +202,11 @@ 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/ [travis-status]: ../img/travis-status.png [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/docs/topics/documenting-your-api.md b/docs/topics/documenting-your-api.md index ef4d2b4a8..9a87c17c1 100644 --- a/docs/topics/documenting-your-api.md +++ b/docs/topics/documenting-your-api.md @@ -4,14 +4,77 @@ > > — Roy Fielding, [REST APIs must be hypertext driven][cite] -There are a variety of approaches to API documentation. This document introduces a few of the various tools and options you might choose from. The approaches should not be considered exclusive - you may want to provide more than one documentation style for you API, such as a self describing API that also includes static documentation of the various API endpoints. +REST framework provides built-in support for API documentation. There are also a number of great third-party documentation tools available. -## Endpoint documentation +## Built-in API documentation -The most common way to document Web APIs today is to produce documentation that lists the API endpoints verbatim, and describes the allowable operations on each. There are various tools that allow you to do this in an automated or semi-automated way. +The built-in API documentation includes: + +* Documentation of API endpoints. +* Automatically generated code samples for each of the available API client libraries. +* Support for API interaction. + +### Installation + +The `coreapi` library is required as a dependancy for the API docs. Make sure +to install the latest version. 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 + + urlpatterns = [ + ... + url(r'^docs/', include_docs_urls(title='My API title')) + ] + +This will include two different views: + + * `/docs/` - The documentation page itself. + * `/docs/schema.js` - A JavaScript resource that exposes the API schema. + +### Documenting your views + +You can document your views by including docstrings that describe each of the available actions. +For example: + + class UserList(generics.ListAPIView): + """ + Return a list of all the existing users. + """" + +If a view supports multiple methods, you should split your documentation using `method:` style delimiters. + + class UserList(generics.ListCreateAPIView): + """ + get: + Return a list of all the existing users. + + post: + Create a new user instance. + """ + +When using viewsets, you should use the relevant action names as delimiters. + + class UserViewSet(viewsets.ModelViewSet): + """ + retrieve: + Return the given user. + + list: + Return a list of all the existing users. + + create: + Create a new user instance. + """ --- +## Third party packages + +There are a number of mature third-party packages for providing API documentation. + #### DRF Docs [DRF Docs][drfdocs-repo] allows you to document Web APIs made with Django REST Framework and it is authored by Emmanouil Konstantinidis. It's made to work out of the box and its setup should not take more than a couple of minutes. Complete documentation can be found on the [website][drfdocs-website] while there is also a [demo][drfdocs-demo] available for people to see what it looks like. **Live API Endpoints** allow you to utilize the endpoints from within the documentation in a neat way. @@ -148,4 +211,4 @@ To implement a hypermedia API you'll need to decide on an appropriate media type [image-django-rest-swagger]: ../img/django-rest-swagger.png [image-apiary]: ../img/apiary.png [image-self-describing-api]: ../img/self-describing.png -[schemas-examples]: api-guide/schemas/#examples +[schemas-examples]: ../api-guide/schemas/#examples diff --git a/docs/topics/funding.md b/docs/topics/funding.md index 91099cb3f..20273f5c9 100644 --- a/docs/topics/funding.md +++ b/docs/topics/funding.md @@ -97,10 +97,6 @@ form.signup { # Funding -> As a direct result of [a successful Mozilla grant application](mozilla-grant.md), I will be leaving my current role at [DabApps](http://www.dabapps.com), and attempting to secure a sustainable business model for REST framework development. I need your help in order to make this work. -> -> — Tom Christie - If you use REST framework commercially we strongly encourage you to invest in its continued development by signing up for a paid plan. **We believe that collaboratively funded software can offer outstanding returns on investment, by encouraging our users to collectively share the cost of development.** @@ -115,36 +111,55 @@ REST framework continues to be open-source and permissively licensed, but we fir --- -## Making the business case +## What funding has enabled so far -Our [successful Kickstarter campaign](https://www.kickstarter.com/projects/tomchristie/django-rest-framework-3) demonstrates the impressive cost-reward ratio of shared funding of open-source software. +* The [3.4](http://www.django-rest-framework.org/topics/3.4-announcement/) and [3.5](http://www.django-rest-framework.org/topics/3.5-announcement/) releases, including schema generation for both Swagger and RAML, a Python client library, a Command Line client, and addressing of a large number of outstanding issues. +* The [3.6](http://www.django-rest-framework.org/topics/3.6-announcement/) release, including JavaScript client library, and API documentation, complete with auto-generated code samples. +* Tom Christie, the creator of Django REST framework, working on the project full-time. +* Around 80-90 issues and pull requests closed per month since Tom Christie started working on the project full-time. +* A community & operations manager position part-time for 4 months, helping mature the business and grow sponsorship. +* Contracting development time for the work on the JavaScript client library and API documentation tooling. -With *typical corporate fundings of just £100-£1000 per organization* we successfully delivered: +--- -* The comprehensive serializer redesign, and **version 3.0 release**. -* Ongoing triage and community support, **closing over 1600 tickets**. -* Substantial improvements to the Browsable API. -* The admin interface. -* A new pagination API including offset/limit and cursor pagination implementations, plus on-page controls. -* A versioning API, including URL-based and header-based versioning schemes. -* Support for customizable exception handling. -* Support for Django's PostgreSQL HStoreField, ArrayField and JSONField. -* Templated HTML form support, including HTML forms with nested list and objects. -* Internationalization support for API responses, currently with 27 languages. -* The metadata APIs for handling `OPTIONS` requests and schema endpoints. -* Numerous minor improvements and better quality throughout the codebase. +## What future funding will enable -This incredible level of return on investment is *only possible through collaboratively funded models*, which is why we believe that supporting our paid plans is in everyone's best interest. +* Realtime API support, using WebSockets. This will consist of documentation and support for using REST framework together with Django Channels, plus integrating WebSocket support into the client libraries. +* Better authentication defaults, possibly bringing JWT & CORs support into the core package. +* Securing the community & operations manager position long-term. +* Opening up and securing a part-time position to focus on ticket triage and resolution. +* Paying for development time on building API client libraries in a range of programming languages. These would be integrated directly into the upcoming API documentation. Sign up for a paid plan today, and help ensure that REST framework becomes a sustainable, full-time funded project. --- -## Freelancer plan +## What our sponsors and users say -This subscription is recommended for freelancers and other individuals with an interest in seeing REST framework continue to improve. +> As a developer, Django REST framework feels like an obvious and natural extension to all the great things that make up Django and it's community. Getting started is easy while providing simple abstractions which makes it flexible and customizable. Contributing and supporting Django REST framework helps ensure its future and one way or another it also helps Django, and the Python ecosystem. +> +> — José Padilla, Django REST framework contributor -If you are using REST framework as an full-time employee, consider recommending that your company takes out a [corporate plan](#corporate-plans). +  + +> The number one feature of the Python programming language is its community. Such a community is only possible because of the Open Source nature of the language and all the culture that comes from it. Building great Open Source projects require great minds. Given that, we at Vinta are not only proud to sponsor the team behind DRF but we also recognize the ROI that comes from it. +> +> — Filipe Ximenes, Vinta Software + +  + +> It's really awesome that this project continues to endure. The code base is top notch and the maintainers are committed to the highest level of quality. +DRF is one of the core reasons why Django is top choice among web frameworks today. In my opinion, it sets the standard for rest frameworks for the development community at large. +> +> — Andrew Conti, Django REST framework user + +--- + +## Individual plan + +This subscription is recommended for individuals with an interest in seeing REST framework continue to improve. + +If you are using REST framework as a full-time employee, consider recommending that your company takes out a [corporate plan](#corporate-plans).
@@ -154,7 +169,7 @@ If you are using REST framework as an full-time employee, consider recommending {{ rates.personal1 }} /month{% if vat %} +VAT{% endif %}
-
Freelancer
+
Individual
Support ongoing development @@ -306,7 +321,7 @@ Our professional and premium plans also include **priority support**. At any tim *Billing is monthly and you can cancel at any time.* -Once you've signed up I'll contact you via email and arrange your ad placements on the site. +Once you've signed up, we will contact you via email and arrange your ad placements on the site. For further enquires please contact funding@django-rest-framework.org. @@ -314,14 +329,7 @@ For further enquires please contact diff --git a/docs/topics/internationalization.md b/docs/topics/internationalization.md index 3968e23d1..f7efbf697 100644 --- a/docs/topics/internationalization.md +++ b/docs/topics/internationalization.md @@ -81,7 +81,7 @@ If you're translating a new language you'll need to translate the existing REST 4. Edit the `django.po` file you've just copied, translating all the error messages. -5. Run `manage.py compilemessages -l pt_BR` to make the translations +5. Run `manage.py compilemessages -l pt_BR` to make the translations available for Django to use. You should see a message like `processing file django.po in <...>/locale/pt_BR/LC_MESSAGES`. 6. Restart your development server to see the changes take effect. @@ -106,7 +106,7 @@ For API clients the most appropriate of these will typically be to use the `Acce [django-translation]: https://docs.djangoproject.com/en/1.7/topics/i18n/translation [custom-exception-handler]: ../api-guide/exceptions.md#custom-exception-handling [transifex-project]: https://www.transifex.com/projects/p/django-rest-framework/ -[django-po-source]: https://raw.githubusercontent.com/tomchristie/django-rest-framework/master/rest_framework/locale/en_US/LC_MESSAGES/django.po +[django-po-source]: https://raw.githubusercontent.com/encode/django-rest-framework/master/rest_framework/locale/en_US/LC_MESSAGES/django.po [django-language-preference]: https://docs.djangoproject.com/en/1.7/topics/i18n/translation/#how-django-discovers-language-preference [django-locale-paths]: https://docs.djangoproject.com/en/1.7/ref/settings/#std:setting-LOCALE_PATHS [django-locale-name]: https://docs.djangoproject.com/en/1.7/topics/i18n/#term-locale-name diff --git a/docs/topics/jobs.md b/docs/topics/jobs.md new file mode 100644 index 000000000..123d8b9d9 --- /dev/null +++ b/docs/topics/jobs.md @@ -0,0 +1,39 @@ +# Jobs + +Looking for a new Django REST Framework related role? On this site we provide a list of job resources that may be helpful. It's also worth checking out if any of [our sponsors are hiring][drf-funding]. + + +## Places to look for Django REST Framework Jobs + +* [https://www.djangoproject.com/community/jobs/][djangoproject-website] +* [https://www.python.org/jobs/][python-org-jobs] +* [https://djangogigs.com][django-gigs-com] +* [https://djangojobs.net/jobs/][django-jobs-net] +* [http://djangojobbers.com][django-jobbers-com] +* [https://www.indeed.com/q-Django-jobs.html][indeed-com] +* [http://stackoverflow.com/jobs/developer-jobs-using-django][stackoverflow-com] +* [https://www.upwork.com/o/jobs/browse/skill/django-framework/][upwork-com] +* [https://www.technojobs.co.uk/django-jobs][technobjobs-co-uk] +* [https://remoteok.io/remote-django-jobs][remoteok-io] +* [https://www.remotepython.com/jobs/][remotepython-com] + + +Know of any other great resources for Django REST Framework jobs that are missing in our list? Please [submit a pull request][submit-pr] or [email us][anna-email]. + +Wonder how else you can help? One of the best ways you can help Django REST Framework is to ask interviewers if their company is signed up for [REST Framework sponsorship][drf-funding] yet. + + +[djangoproject-website]: https://www.djangoproject.com/community/jobs/ +[python-org-jobs]: https://www.python.org/jobs/ +[django-gigs-com]: https://djangogigs.com +[django-jobs-net]: https://djangojobs.net/jobs/ +[django-jobbers-com]: http://djangojobbers.com +[indeed-com]: https://www.indeed.com/q-Django-jobs.html +[stackoverflow-com]: http://stackoverflow.com/jobs/developer-jobs-using-django +[upwork-com]: https://www.upwork.com/o/jobs/browse/skill/django-framework/ +[technobjobs-co-uk]: https://www.technojobs.co.uk/django-jobs +[remoteok-io]: https://remoteok.io/remote-django-jobs +[remotepython-com]: https://www.remotepython.com/jobs/ +[drf-funding]: https://fund.django-rest-framework.org/topics/funding/ +[submit-pr]: https://github.com/encode/django-rest-framework +[anna-email]: mailto:anna@django-rest-framework.org diff --git a/docs/topics/project-management.md b/docs/topics/project-management.md index 37e5c6882..cc86c968a 100644 --- a/docs/topics/project-management.md +++ b/docs/topics/project-management.md @@ -17,9 +17,9 @@ We have a quarterly maintenance cycle where new members may join the maintenance #### Current team -The [maintenance team for Q4 2015](https://github.com/tomchristie/django-rest-framework/issues/2190): +The [maintenance team for Q4 2015](https://github.com/encode/django-rest-framework/issues/2190): -* [@tomchristie](https://github.com/tomchristie/) +* [@tomchristie](https://github.com/encode/) * [@xordoquy](https://github.com/xordoquy/) (Release manager.) * [@carltongibson](https://github.com/carltongibson/) * [@kevin-brown](https://github.com/kevin-brown/) @@ -104,9 +104,9 @@ The following template should be used for the description of the issue, and serv Checklist: - - [ ] Create pull request for [release notes](https://github.com/tomchristie/django-rest-framework/blob/master/docs/topics/release-notes.md) based on the [*.*.* milestone](https://github.com/tomchristie/django-rest-framework/milestones/***). + - [ ] Create pull request for [release notes](https://github.com/encode/django-rest-framework/blob/master/docs/topics/release-notes.md) based on the [*.*.* milestone](https://github.com/encode/django-rest-framework/milestones/***). - [ ] Update the translations from [transifex](http://www.django-rest-framework.org/topics/project-management/#translations). - - [ ] Ensure the pull request increments the version to `*.*.*` in [`restframework/__init__.py`](https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/__init__.py). + - [ ] Ensure the pull request increments the version to `*.*.*` in [`restframework/__init__.py`](https://github.com/encode/django-rest-framework/blob/master/rest_framework/__init__.py). - [ ] Confirm with @tomchristie that release is finalized and ready to go. - [ ] Ensure that release date is included in pull request. - [ ] Merge the release pull request. @@ -197,10 +197,10 @@ The following issues still need to be addressed: * Document ownership and management of the security mailing list. [bus-factor]: http://en.wikipedia.org/wiki/Bus_factor -[un-triaged]: https://github.com/tomchristie/django-rest-framework/issues?q=is%3Aopen+no%3Alabel +[un-triaged]: https://github.com/encode/django-rest-framework/issues?q=is%3Aopen+no%3Alabel [transifex-project]: https://www.transifex.com/projects/p/django-rest-framework/ [transifex-client]: https://pypi.python.org/pypi/transifex-client [translation-memory]: http://docs.transifex.com/guides/tm#let-tm-automatically-populate-translations -[github-org]: https://github.com/tomchristie/django-rest-framework/issues/2162 +[github-org]: https://github.com/encode/django-rest-framework/issues/2162 [sandbox]: http://restframework.herokuapp.com/ [mailing-list]: https://groups.google.com/forum/#!forum/django-rest-framework diff --git a/docs/topics/release-notes.md b/docs/topics/release-notes.md index af6ad7a74..dd7054f75 100644 --- a/docs/topics/release-notes.md +++ b/docs/topics/release-notes.md @@ -38,8 +38,52 @@ You can determine your currently installed version using `pip freeze`: --- +## 3.6.x series + +### 3.6.2 + +**Date**: [10th March 2017][3.6.2-milestone] + +* Support for Safari & IE in API docs. ([#4959][gh4959], [#4961][gh4961]) +* Add missing `mark_safe` in API docs template tags. ([#4952][gh4952], [#4953][gh4953]) +* Add missing glyicon fonts. ([#4950][gh4950], [#4951][gh4951]) +* Fix One-to-one fields in API docs. ([#4955][gh4955], [#4956][gh4956]) +* Test clean ups. ([#4949][gh4949]) + +### 3.6.1 + +**Date**: [9th March 2017][3.6.1-milestone] + +* Ensure `markdown` dependancy is optional. ([#4947][gh4947]) + +### 3.6.0 + +**Date**: [9th March 2017][3.6.0-milestone] + +See the [release announcement][3.6-release]. + +--- + ## 3.5.x series +### 3.5.4 + +**Date**: [10th February 2017][3.5.4-milestone] + +* Add max_length and min_length arguments for ListField. ([#4877][gh4877]) +* Add per-view custom exception handler support. ([#4753][gh4753]) +* Support disabling of declared fields on serializer subclasses. ([#4764][gh4764]) +* Support custom view names on `@list_route` and `@detail_route` endpoints. ([#4821][gh4821]) +* Correct labels for fields in login template when custom user model is used. ([#4841][gh4841]) +* Whitespace fixes for descriptions generated from docstrings. ([#4759][gh4759], [#4869][gh4869], [#4870][gh4870]) +* Better error reporting when schemas are returned by views without a schema renderer. ([#4790][gh4790]) +* Fix for returned response of `PUT` requests when `prefetch_related` is used. ([#4661][gh4661], [#4668][gh4668]) +* Fix for breadcrumb view names. ([#4750][gh4750]) +* Fix for RequestsClient ensuring fully qualified URLs. ([#4678][gh4678]) +* Fix for incorrect behavior of writable-nested fields check in some cases. ([#4634][gh4634], [#4669][gh4669]) +* Resolve Django deprecation warnings. ([#4712][gh4712]) +* Various cleanup of test cases. + ### 3.5.3 **Date**: [7th November 2016][3.5.3-milestone] @@ -600,619 +644,657 @@ For older release notes, [please see the version 2.x documentation][old-release- [deprecation-policy]: #deprecation-policy [django-deprecation-policy]: https://docs.djangoproject.com/en/stable/internals/release-process/#internal-release-deprecation-policy [defusedxml-announce]: http://blog.python.org/2013/02/announcing-defusedxml-fixes-for-xml.html -[743]: https://github.com/tomchristie/django-rest-framework/pull/743 +[743]: https://github.com/encode/django-rest-framework/pull/743 [staticfiles14]: https://docs.djangoproject.com/en/1.4/howto/static-files/#with-a-template-tag [staticfiles13]: https://docs.djangoproject.com/en/1.3/howto/static-files/#with-a-template-tag [2.1.0-notes]: https://groups.google.com/d/topic/django-rest-framework/Vv2M0CMY9bg/discussion -[ticket-582]: https://github.com/tomchristie/django-rest-framework/issues/582 +[ticket-582]: https://github.com/encode/django-rest-framework/issues/582 [rfc-6266]: http://tools.ietf.org/html/rfc6266#section-4.3 -[old-release-notes]: https://github.com/tomchristie/django-rest-framework/blob/version-2.4.x/docs/topics/release-notes.md +[old-release-notes]: https://github.com/encode/django-rest-framework/blob/version-2.4.x/docs/topics/release-notes.md +[3.6-release]: 3.6-announcement.md -[3.0.1-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.0.1+Release%22 -[3.0.2-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.0.2+Release%22 -[3.0.3-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.0.3+Release%22 -[3.0.4-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.0.4+Release%22 -[3.0.5-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.0.5+Release%22 -[3.1.0-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.1.0+Release%22 -[3.1.1-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.1.1+Release%22 -[3.1.2-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.1.2+Release%22 -[3.1.3-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.1.3+Release%22 -[3.2.0-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.2.0+Release%22 -[3.2.1-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.2.1+Release%22 -[3.2.2-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.2.2+Release%22 -[3.2.3-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.2.3+Release%22 -[3.2.4-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.2.4+Release%22 -[3.2.5-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.2.5+Release%22 -[3.3.0-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.3.0+Release%22 -[3.3.1-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.3.1+Release%22 -[3.3.2-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.3.2+Release%22 -[3.3.3-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.3.3+Release%22 -[3.4.0-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.4.0+Release%22 -[3.4.1-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.4.1+Release%22 -[3.4.2-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.4.2+Release%22 -[3.4.3-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.4.3+Release%22 -[3.4.4-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.4.4+Release%22 -[3.4.5-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.4.5+Release%22 -[3.4.6-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.4.6+Release%22 -[3.4.7-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.4.7+Release%22 -[3.5.0-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.5.0+Release%22 -[3.5.1-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.5.1+Release%22 -[3.5.2-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.5.2+Release%22 -[3.5.3-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.5.3+Release%22 +[3.0.1-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.0.1+Release%22 +[3.0.2-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.0.2+Release%22 +[3.0.3-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.0.3+Release%22 +[3.0.4-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.0.4+Release%22 +[3.0.5-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.0.5+Release%22 +[3.1.0-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.1.0+Release%22 +[3.1.1-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.1.1+Release%22 +[3.1.2-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.1.2+Release%22 +[3.1.3-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.1.3+Release%22 +[3.2.0-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.2.0+Release%22 +[3.2.1-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.2.1+Release%22 +[3.2.2-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.2.2+Release%22 +[3.2.3-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.2.3+Release%22 +[3.2.4-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.2.4+Release%22 +[3.2.5-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.2.5+Release%22 +[3.3.0-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.3.0+Release%22 +[3.3.1-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.3.1+Release%22 +[3.3.2-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.3.2+Release%22 +[3.3.3-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.3.3+Release%22 +[3.4.0-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.4.0+Release%22 +[3.4.1-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.4.1+Release%22 +[3.4.2-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.4.2+Release%22 +[3.4.3-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.4.3+Release%22 +[3.4.4-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.4.4+Release%22 +[3.4.5-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.4.5+Release%22 +[3.4.6-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.4.6+Release%22 +[3.4.7-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.4.7+Release%22 +[3.5.0-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.5.0+Release%22 +[3.5.1-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.5.1+Release%22 +[3.5.2-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.5.2+Release%22 +[3.5.3-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.5.3+Release%22 +[3.5.4-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.5.4+Release%22 +[3.6.0-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.6.0+Release%22 +[3.6.1-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.6.1+Release%22 +[3.6.2-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.6.2+Release%22 -[gh2013]: https://github.com/tomchristie/django-rest-framework/issues/2013 -[gh2098]: https://github.com/tomchristie/django-rest-framework/issues/2098 -[gh2109]: https://github.com/tomchristie/django-rest-framework/issues/2109 -[gh2135]: https://github.com/tomchristie/django-rest-framework/issues/2135 -[gh2163]: https://github.com/tomchristie/django-rest-framework/issues/2163 -[gh2168]: https://github.com/tomchristie/django-rest-framework/issues/2168 -[gh2169]: https://github.com/tomchristie/django-rest-framework/issues/2169 -[gh2172]: https://github.com/tomchristie/django-rest-framework/issues/2172 -[gh2175]: https://github.com/tomchristie/django-rest-framework/issues/2175 -[gh2184]: https://github.com/tomchristie/django-rest-framework/issues/2184 -[gh2187]: https://github.com/tomchristie/django-rest-framework/issues/2187 -[gh2193]: https://github.com/tomchristie/django-rest-framework/issues/2193 -[gh2194]: https://github.com/tomchristie/django-rest-framework/issues/2194 -[gh2195]: https://github.com/tomchristie/django-rest-framework/issues/2195 -[gh2196]: https://github.com/tomchristie/django-rest-framework/issues/2196 -[gh2197]: https://github.com/tomchristie/django-rest-framework/issues/2197 -[gh2200]: https://github.com/tomchristie/django-rest-framework/issues/2200 -[gh2202]: https://github.com/tomchristie/django-rest-framework/issues/2202 -[gh2205]: https://github.com/tomchristie/django-rest-framework/issues/2205 -[gh2213]: https://github.com/tomchristie/django-rest-framework/issues/2213 -[gh2213]: https://github.com/tomchristie/django-rest-framework/issues/2213 -[gh2215]: https://github.com/tomchristie/django-rest-framework/issues/2215 -[gh2225]: https://github.com/tomchristie/django-rest-framework/issues/2225 -[gh2231]: https://github.com/tomchristie/django-rest-framework/issues/2231 -[gh2232]: https://github.com/tomchristie/django-rest-framework/issues/2232 -[gh2239]: https://github.com/tomchristie/django-rest-framework/issues/2239 -[gh2242]: https://github.com/tomchristie/django-rest-framework/issues/2242 -[gh2243]: https://github.com/tomchristie/django-rest-framework/issues/2243 -[gh2244]: https://github.com/tomchristie/django-rest-framework/issues/2244 +[gh2013]: https://github.com/encode/django-rest-framework/issues/2013 +[gh2098]: https://github.com/encode/django-rest-framework/issues/2098 +[gh2109]: https://github.com/encode/django-rest-framework/issues/2109 +[gh2135]: https://github.com/encode/django-rest-framework/issues/2135 +[gh2163]: https://github.com/encode/django-rest-framework/issues/2163 +[gh2168]: https://github.com/encode/django-rest-framework/issues/2168 +[gh2169]: https://github.com/encode/django-rest-framework/issues/2169 +[gh2172]: https://github.com/encode/django-rest-framework/issues/2172 +[gh2175]: https://github.com/encode/django-rest-framework/issues/2175 +[gh2184]: https://github.com/encode/django-rest-framework/issues/2184 +[gh2187]: https://github.com/encode/django-rest-framework/issues/2187 +[gh2193]: https://github.com/encode/django-rest-framework/issues/2193 +[gh2194]: https://github.com/encode/django-rest-framework/issues/2194 +[gh2195]: https://github.com/encode/django-rest-framework/issues/2195 +[gh2196]: https://github.com/encode/django-rest-framework/issues/2196 +[gh2197]: https://github.com/encode/django-rest-framework/issues/2197 +[gh2200]: https://github.com/encode/django-rest-framework/issues/2200 +[gh2202]: https://github.com/encode/django-rest-framework/issues/2202 +[gh2205]: https://github.com/encode/django-rest-framework/issues/2205 +[gh2213]: https://github.com/encode/django-rest-framework/issues/2213 +[gh2213]: https://github.com/encode/django-rest-framework/issues/2213 +[gh2215]: https://github.com/encode/django-rest-framework/issues/2215 +[gh2225]: https://github.com/encode/django-rest-framework/issues/2225 +[gh2231]: https://github.com/encode/django-rest-framework/issues/2231 +[gh2232]: https://github.com/encode/django-rest-framework/issues/2232 +[gh2239]: https://github.com/encode/django-rest-framework/issues/2239 +[gh2242]: https://github.com/encode/django-rest-framework/issues/2242 +[gh2243]: https://github.com/encode/django-rest-framework/issues/2243 +[gh2244]: https://github.com/encode/django-rest-framework/issues/2244 -[gh2155]: https://github.com/tomchristie/django-rest-framework/issues/2155 -[gh2218]: https://github.com/tomchristie/django-rest-framework/issues/2218 -[gh2228]: https://github.com/tomchristie/django-rest-framework/issues/2228 -[gh2234]: https://github.com/tomchristie/django-rest-framework/issues/2234 -[gh2255]: https://github.com/tomchristie/django-rest-framework/issues/2255 -[gh2259]: https://github.com/tomchristie/django-rest-framework/issues/2259 -[gh2262]: https://github.com/tomchristie/django-rest-framework/issues/2262 -[gh2263]: https://github.com/tomchristie/django-rest-framework/issues/2263 -[gh2266]: https://github.com/tomchristie/django-rest-framework/issues/2266 -[gh2267]: https://github.com/tomchristie/django-rest-framework/issues/2267 -[gh2270]: https://github.com/tomchristie/django-rest-framework/issues/2270 -[gh2279]: https://github.com/tomchristie/django-rest-framework/issues/2279 -[gh2280]: https://github.com/tomchristie/django-rest-framework/issues/2280 -[gh2289]: https://github.com/tomchristie/django-rest-framework/issues/2289 -[gh2290]: https://github.com/tomchristie/django-rest-framework/issues/2290 -[gh2291]: https://github.com/tomchristie/django-rest-framework/issues/2291 -[gh2294]: https://github.com/tomchristie/django-rest-framework/issues/2294 +[gh2155]: https://github.com/encode/django-rest-framework/issues/2155 +[gh2218]: https://github.com/encode/django-rest-framework/issues/2218 +[gh2228]: https://github.com/encode/django-rest-framework/issues/2228 +[gh2234]: https://github.com/encode/django-rest-framework/issues/2234 +[gh2255]: https://github.com/encode/django-rest-framework/issues/2255 +[gh2259]: https://github.com/encode/django-rest-framework/issues/2259 +[gh2262]: https://github.com/encode/django-rest-framework/issues/2262 +[gh2263]: https://github.com/encode/django-rest-framework/issues/2263 +[gh2266]: https://github.com/encode/django-rest-framework/issues/2266 +[gh2267]: https://github.com/encode/django-rest-framework/issues/2267 +[gh2270]: https://github.com/encode/django-rest-framework/issues/2270 +[gh2279]: https://github.com/encode/django-rest-framework/issues/2279 +[gh2280]: https://github.com/encode/django-rest-framework/issues/2280 +[gh2289]: https://github.com/encode/django-rest-framework/issues/2289 +[gh2290]: https://github.com/encode/django-rest-framework/issues/2290 +[gh2291]: https://github.com/encode/django-rest-framework/issues/2291 +[gh2294]: https://github.com/encode/django-rest-framework/issues/2294 -[gh1101]: https://github.com/tomchristie/django-rest-framework/issues/1101 -[gh2010]: https://github.com/tomchristie/django-rest-framework/issues/2010 -[gh2278]: https://github.com/tomchristie/django-rest-framework/issues/2278 -[gh2283]: https://github.com/tomchristie/django-rest-framework/issues/2283 -[gh2287]: https://github.com/tomchristie/django-rest-framework/issues/2287 -[gh2311]: https://github.com/tomchristie/django-rest-framework/issues/2311 -[gh2315]: https://github.com/tomchristie/django-rest-framework/issues/2315 -[gh2317]: https://github.com/tomchristie/django-rest-framework/issues/2317 -[gh2319]: https://github.com/tomchristie/django-rest-framework/issues/2319 -[gh2327]: https://github.com/tomchristie/django-rest-framework/issues/2327 -[gh2330]: https://github.com/tomchristie/django-rest-framework/issues/2330 -[gh2331]: https://github.com/tomchristie/django-rest-framework/issues/2331 -[gh2340]: https://github.com/tomchristie/django-rest-framework/issues/2340 -[gh2342]: https://github.com/tomchristie/django-rest-framework/issues/2342 -[gh2351]: https://github.com/tomchristie/django-rest-framework/issues/2351 -[gh2355]: https://github.com/tomchristie/django-rest-framework/issues/2355 -[gh2369]: https://github.com/tomchristie/django-rest-framework/issues/2369 -[gh2386]: https://github.com/tomchristie/django-rest-framework/issues/2386 +[gh1101]: https://github.com/encode/django-rest-framework/issues/1101 +[gh2010]: https://github.com/encode/django-rest-framework/issues/2010 +[gh2278]: https://github.com/encode/django-rest-framework/issues/2278 +[gh2283]: https://github.com/encode/django-rest-framework/issues/2283 +[gh2287]: https://github.com/encode/django-rest-framework/issues/2287 +[gh2311]: https://github.com/encode/django-rest-framework/issues/2311 +[gh2315]: https://github.com/encode/django-rest-framework/issues/2315 +[gh2317]: https://github.com/encode/django-rest-framework/issues/2317 +[gh2319]: https://github.com/encode/django-rest-framework/issues/2319 +[gh2327]: https://github.com/encode/django-rest-framework/issues/2327 +[gh2330]: https://github.com/encode/django-rest-framework/issues/2330 +[gh2331]: https://github.com/encode/django-rest-framework/issues/2331 +[gh2340]: https://github.com/encode/django-rest-framework/issues/2340 +[gh2342]: https://github.com/encode/django-rest-framework/issues/2342 +[gh2351]: https://github.com/encode/django-rest-framework/issues/2351 +[gh2355]: https://github.com/encode/django-rest-framework/issues/2355 +[gh2369]: https://github.com/encode/django-rest-framework/issues/2369 +[gh2386]: https://github.com/encode/django-rest-framework/issues/2386 -[gh2425]: https://github.com/tomchristie/django-rest-framework/issues/2425 -[gh2446]: https://github.com/tomchristie/django-rest-framework/issues/2446 -[gh2441]: https://github.com/tomchristie/django-rest-framework/issues/2441 -[gh2451]: https://github.com/tomchristie/django-rest-framework/issues/2451 -[gh2106]: https://github.com/tomchristie/django-rest-framework/issues/2106 -[gh2448]: https://github.com/tomchristie/django-rest-framework/issues/2448 -[gh2433]: https://github.com/tomchristie/django-rest-framework/issues/2433 -[gh2432]: https://github.com/tomchristie/django-rest-framework/issues/2432 -[gh2434]: https://github.com/tomchristie/django-rest-framework/issues/2434 -[gh2430]: https://github.com/tomchristie/django-rest-framework/issues/2430 -[gh2421]: https://github.com/tomchristie/django-rest-framework/issues/2421 -[gh2410]: https://github.com/tomchristie/django-rest-framework/issues/2410 -[gh2408]: https://github.com/tomchristie/django-rest-framework/issues/2408 -[gh2401]: https://github.com/tomchristie/django-rest-framework/issues/2401 -[gh2400]: https://github.com/tomchristie/django-rest-framework/issues/2400 -[gh2399]: https://github.com/tomchristie/django-rest-framework/issues/2399 -[gh2388]: https://github.com/tomchristie/django-rest-framework/issues/2388 -[gh2360]: https://github.com/tomchristie/django-rest-framework/issues/2360 +[gh2425]: https://github.com/encode/django-rest-framework/issues/2425 +[gh2446]: https://github.com/encode/django-rest-framework/issues/2446 +[gh2441]: https://github.com/encode/django-rest-framework/issues/2441 +[gh2451]: https://github.com/encode/django-rest-framework/issues/2451 +[gh2106]: https://github.com/encode/django-rest-framework/issues/2106 +[gh2448]: https://github.com/encode/django-rest-framework/issues/2448 +[gh2433]: https://github.com/encode/django-rest-framework/issues/2433 +[gh2432]: https://github.com/encode/django-rest-framework/issues/2432 +[gh2434]: https://github.com/encode/django-rest-framework/issues/2434 +[gh2430]: https://github.com/encode/django-rest-framework/issues/2430 +[gh2421]: https://github.com/encode/django-rest-framework/issues/2421 +[gh2410]: https://github.com/encode/django-rest-framework/issues/2410 +[gh2408]: https://github.com/encode/django-rest-framework/issues/2408 +[gh2401]: https://github.com/encode/django-rest-framework/issues/2401 +[gh2400]: https://github.com/encode/django-rest-framework/issues/2400 +[gh2399]: https://github.com/encode/django-rest-framework/issues/2399 +[gh2388]: https://github.com/encode/django-rest-framework/issues/2388 +[gh2360]: https://github.com/encode/django-rest-framework/issues/2360 -[gh1850]: https://github.com/tomchristie/django-rest-framework/issues/1850 -[gh2108]: https://github.com/tomchristie/django-rest-framework/issues/2108 -[gh2475]: https://github.com/tomchristie/django-rest-framework/issues/2475 -[gh2479]: https://github.com/tomchristie/django-rest-framework/issues/2479 -[gh2486]: https://github.com/tomchristie/django-rest-framework/issues/2486 -[gh2492]: https://github.com/tomchristie/django-rest-framework/issues/2492 -[gh2518]: https://github.com/tomchristie/django-rest-framework/issues/2518 -[gh2519]: https://github.com/tomchristie/django-rest-framework/issues/2519 -[gh2524]: https://github.com/tomchristie/django-rest-framework/issues/2524 -[gh2530]: https://github.com/tomchristie/django-rest-framework/issues/2530 +[gh1850]: https://github.com/encode/django-rest-framework/issues/1850 +[gh2108]: https://github.com/encode/django-rest-framework/issues/2108 +[gh2475]: https://github.com/encode/django-rest-framework/issues/2475 +[gh2479]: https://github.com/encode/django-rest-framework/issues/2479 +[gh2486]: https://github.com/encode/django-rest-framework/issues/2486 +[gh2492]: https://github.com/encode/django-rest-framework/issues/2492 +[gh2518]: https://github.com/encode/django-rest-framework/issues/2518 +[gh2519]: https://github.com/encode/django-rest-framework/issues/2519 +[gh2524]: https://github.com/encode/django-rest-framework/issues/2524 +[gh2530]: https://github.com/encode/django-rest-framework/issues/2530 -[gh2691]: https://github.com/tomchristie/django-rest-framework/issues/2691 -[gh2685]: https://github.com/tomchristie/django-rest-framework/issues/2685 -[gh2591]: https://github.com/tomchristie/django-rest-framework/issues/2591 -[gh2678]: https://github.com/tomchristie/django-rest-framework/issues/2678 -[gh2667]: https://github.com/tomchristie/django-rest-framework/issues/2667 -[gh2700]: https://github.com/tomchristie/django-rest-framework/issues/2700 -[gh2645]: https://github.com/tomchristie/django-rest-framework/issues/2645 -[gh2640]: https://github.com/tomchristie/django-rest-framework/issues/2640 -[gh2637]: https://github.com/tomchristie/django-rest-framework/issues/2637 -[gh2641]: https://github.com/tomchristie/django-rest-framework/issues/2641 -[gh2631]: https://github.com/tomchristie/django-rest-framework/issues/2631 -[gh2741]: https://github.com/tomchristie/django-rest-framework/issues/2641 -[gh2743]: https://github.com/tomchristie/django-rest-framework/issues/2643 +[gh2691]: https://github.com/encode/django-rest-framework/issues/2691 +[gh2685]: https://github.com/encode/django-rest-framework/issues/2685 +[gh2591]: https://github.com/encode/django-rest-framework/issues/2591 +[gh2678]: https://github.com/encode/django-rest-framework/issues/2678 +[gh2667]: https://github.com/encode/django-rest-framework/issues/2667 +[gh2700]: https://github.com/encode/django-rest-framework/issues/2700 +[gh2645]: https://github.com/encode/django-rest-framework/issues/2645 +[gh2640]: https://github.com/encode/django-rest-framework/issues/2640 +[gh2637]: https://github.com/encode/django-rest-framework/issues/2637 +[gh2641]: https://github.com/encode/django-rest-framework/issues/2641 +[gh2631]: https://github.com/encode/django-rest-framework/issues/2631 +[gh2741]: https://github.com/encode/django-rest-framework/issues/2641 +[gh2743]: https://github.com/encode/django-rest-framework/issues/2643 -[gh2656]: https://github.com/tomchristie/django-rest-framework/issues/2656 -[gh2687]: https://github.com/tomchristie/django-rest-framework/issues/2687 -[gh2869]: https://github.com/tomchristie/django-rest-framework/issues/2869 -[gh2764]: https://github.com/tomchristie/django-rest-framework/issues/2764 -[gh2763]: https://github.com/tomchristie/django-rest-framework/issues/2763 -[gh2757]: https://github.com/tomchristie/django-rest-framework/issues/2757 -[gh2630]: https://github.com/tomchristie/django-rest-framework/issues/2630 -[gh2724]: https://github.com/tomchristie/django-rest-framework/issues/2724 -[gh2711]: https://github.com/tomchristie/django-rest-framework/issues/2711 -[gh2745]: https://github.com/tomchristie/django-rest-framework/issues/2745 -[gh2754]: https://github.com/tomchristie/django-rest-framework/issues/2754 -[gh2762]: https://github.com/tomchristie/django-rest-framework/issues/2762 -[gh2798]: https://github.com/tomchristie/django-rest-framework/issues/2798 -[gh2807]: https://github.com/tomchristie/django-rest-framework/issues/2807 -[gh2818]: https://github.com/tomchristie/django-rest-framework/issues/2818 -[gh2835]: https://github.com/tomchristie/django-rest-framework/issues/2835 -[gh2836]: https://github.com/tomchristie/django-rest-framework/issues/2836 -[gh2853]: https://github.com/tomchristie/django-rest-framework/issues/2853 -[gh2862]: https://github.com/tomchristie/django-rest-framework/issues/2862 -[gh2863]: https://github.com/tomchristie/django-rest-framework/issues/2863 -[gh2868]: https://github.com/tomchristie/django-rest-framework/issues/2868 -[gh2905]: https://github.com/tomchristie/django-rest-framework/issues/2905 +[gh2656]: https://github.com/encode/django-rest-framework/issues/2656 +[gh2687]: https://github.com/encode/django-rest-framework/issues/2687 +[gh2869]: https://github.com/encode/django-rest-framework/issues/2869 +[gh2764]: https://github.com/encode/django-rest-framework/issues/2764 +[gh2763]: https://github.com/encode/django-rest-framework/issues/2763 +[gh2757]: https://github.com/encode/django-rest-framework/issues/2757 +[gh2630]: https://github.com/encode/django-rest-framework/issues/2630 +[gh2724]: https://github.com/encode/django-rest-framework/issues/2724 +[gh2711]: https://github.com/encode/django-rest-framework/issues/2711 +[gh2745]: https://github.com/encode/django-rest-framework/issues/2745 +[gh2754]: https://github.com/encode/django-rest-framework/issues/2754 +[gh2762]: https://github.com/encode/django-rest-framework/issues/2762 +[gh2798]: https://github.com/encode/django-rest-framework/issues/2798 +[gh2807]: https://github.com/encode/django-rest-framework/issues/2807 +[gh2818]: https://github.com/encode/django-rest-framework/issues/2818 +[gh2835]: https://github.com/encode/django-rest-framework/issues/2835 +[gh2836]: https://github.com/encode/django-rest-framework/issues/2836 +[gh2853]: https://github.com/encode/django-rest-framework/issues/2853 +[gh2862]: https://github.com/encode/django-rest-framework/issues/2862 +[gh2863]: https://github.com/encode/django-rest-framework/issues/2863 +[gh2868]: https://github.com/encode/django-rest-framework/issues/2868 +[gh2905]: https://github.com/encode/django-rest-framework/issues/2905 -[gh2481]: https://github.com/tomchristie/django-rest-framework/issues/2481 -[gh2989]: https://github.com/tomchristie/django-rest-framework/issues/2989 -[gh2788]: https://github.com/tomchristie/django-rest-framework/issues/2788 -[gh3000]: https://github.com/tomchristie/django-rest-framework/issues/3000 -[gh2993]: https://github.com/tomchristie/django-rest-framework/issues/2993 -[gh2894]: https://github.com/tomchristie/django-rest-framework/issues/2894 -[gh2981]: https://github.com/tomchristie/django-rest-framework/issues/2981 -[gh2811]: https://github.com/tomchristie/django-rest-framework/issues/2811 -[gh2975]: https://github.com/tomchristie/django-rest-framework/issues/2975 -[gh2839]: https://github.com/tomchristie/django-rest-framework/issues/2839 -[gh2940]: https://github.com/tomchristie/django-rest-framework/issues/2940 -[gh2887]: https://github.com/tomchristie/django-rest-framework/issues/2887 -[gh2034]: https://github.com/tomchristie/django-rest-framework/issues/2034 -[gh2933]: https://github.com/tomchristie/django-rest-framework/issues/2933 -[gh2948]: https://github.com/tomchristie/django-rest-framework/issues/2948 -[gh2947]: https://github.com/tomchristie/django-rest-framework/issues/2947 -[gh2952]: https://github.com/tomchristie/django-rest-framework/issues/2952 -[gh2747]: https://github.com/tomchristie/django-rest-framework/issues/2747 -[gh2618]: https://github.com/tomchristie/django-rest-framework/issues/2618 -[gh3008]: https://github.com/tomchristie/django-rest-framework/issues/3008 -[gh2695]: https://github.com/tomchristie/django-rest-framework/issues/2695 +[gh2481]: https://github.com/encode/django-rest-framework/issues/2481 +[gh2989]: https://github.com/encode/django-rest-framework/issues/2989 +[gh2788]: https://github.com/encode/django-rest-framework/issues/2788 +[gh3000]: https://github.com/encode/django-rest-framework/issues/3000 +[gh2993]: https://github.com/encode/django-rest-framework/issues/2993 +[gh2894]: https://github.com/encode/django-rest-framework/issues/2894 +[gh2981]: https://github.com/encode/django-rest-framework/issues/2981 +[gh2811]: https://github.com/encode/django-rest-framework/issues/2811 +[gh2975]: https://github.com/encode/django-rest-framework/issues/2975 +[gh2839]: https://github.com/encode/django-rest-framework/issues/2839 +[gh2940]: https://github.com/encode/django-rest-framework/issues/2940 +[gh2887]: https://github.com/encode/django-rest-framework/issues/2887 +[gh2034]: https://github.com/encode/django-rest-framework/issues/2034 +[gh2933]: https://github.com/encode/django-rest-framework/issues/2933 +[gh2948]: https://github.com/encode/django-rest-framework/issues/2948 +[gh2947]: https://github.com/encode/django-rest-framework/issues/2947 +[gh2952]: https://github.com/encode/django-rest-framework/issues/2952 +[gh2747]: https://github.com/encode/django-rest-framework/issues/2747 +[gh2618]: https://github.com/encode/django-rest-framework/issues/2618 +[gh3008]: https://github.com/encode/django-rest-framework/issues/3008 +[gh2695]: https://github.com/encode/django-rest-framework/issues/2695 -[gh1854]: https://github.com/tomchristie/django-rest-framework/issues/1854 -[gh2250]: https://github.com/tomchristie/django-rest-framework/issues/2250 -[gh2416]: https://github.com/tomchristie/django-rest-framework/issues/2416 -[gh2539]: https://github.com/tomchristie/django-rest-framework/issues/2539 -[gh2659]: https://github.com/tomchristie/django-rest-framework/issues/2659 -[gh2690]: https://github.com/tomchristie/django-rest-framework/issues/2690 -[gh2704]: https://github.com/tomchristie/django-rest-framework/issues/2704 -[gh2712]: https://github.com/tomchristie/django-rest-framework/issues/2712 -[gh2727]: https://github.com/tomchristie/django-rest-framework/issues/2727 -[gh2759]: https://github.com/tomchristie/django-rest-framework/issues/2759 -[gh2766]: https://github.com/tomchristie/django-rest-framework/issues/2766 -[gh2783]: https://github.com/tomchristie/django-rest-framework/issues/2783 -[gh2789]: https://github.com/tomchristie/django-rest-framework/issues/2789 -[gh2804]: https://github.com/tomchristie/django-rest-framework/issues/2804 -[gh2886]: https://github.com/tomchristie/django-rest-framework/issues/2886 -[gh2915]: https://github.com/tomchristie/django-rest-framework/issues/2915 -[gh2920]: https://github.com/tomchristie/django-rest-framework/issues/2920 -[gh2926]: https://github.com/tomchristie/django-rest-framework/issues/2926 -[gh2928]: https://github.com/tomchristie/django-rest-framework/issues/2928 -[gh2935]: https://github.com/tomchristie/django-rest-framework/issues/2935 -[gh3011]: https://github.com/tomchristie/django-rest-framework/issues/3011 -[gh3016]: https://github.com/tomchristie/django-rest-framework/issues/3016 -[gh3024]: https://github.com/tomchristie/django-rest-framework/issues/3024 -[gh3115]: https://github.com/tomchristie/django-rest-framework/issues/3115 -[gh3139]: https://github.com/tomchristie/django-rest-framework/issues/3139 -[gh3165]: https://github.com/tomchristie/django-rest-framework/issues/3165 -[gh3216]: https://github.com/tomchristie/django-rest-framework/issues/3216 -[gh3225]: https://github.com/tomchristie/django-rest-framework/issues/3225 +[gh1854]: https://github.com/encode/django-rest-framework/issues/1854 +[gh2250]: https://github.com/encode/django-rest-framework/issues/2250 +[gh2416]: https://github.com/encode/django-rest-framework/issues/2416 +[gh2539]: https://github.com/encode/django-rest-framework/issues/2539 +[gh2659]: https://github.com/encode/django-rest-framework/issues/2659 +[gh2690]: https://github.com/encode/django-rest-framework/issues/2690 +[gh2704]: https://github.com/encode/django-rest-framework/issues/2704 +[gh2712]: https://github.com/encode/django-rest-framework/issues/2712 +[gh2727]: https://github.com/encode/django-rest-framework/issues/2727 +[gh2759]: https://github.com/encode/django-rest-framework/issues/2759 +[gh2766]: https://github.com/encode/django-rest-framework/issues/2766 +[gh2783]: https://github.com/encode/django-rest-framework/issues/2783 +[gh2789]: https://github.com/encode/django-rest-framework/issues/2789 +[gh2804]: https://github.com/encode/django-rest-framework/issues/2804 +[gh2886]: https://github.com/encode/django-rest-framework/issues/2886 +[gh2915]: https://github.com/encode/django-rest-framework/issues/2915 +[gh2920]: https://github.com/encode/django-rest-framework/issues/2920 +[gh2926]: https://github.com/encode/django-rest-framework/issues/2926 +[gh2928]: https://github.com/encode/django-rest-framework/issues/2928 +[gh2935]: https://github.com/encode/django-rest-framework/issues/2935 +[gh3011]: https://github.com/encode/django-rest-framework/issues/3011 +[gh3016]: https://github.com/encode/django-rest-framework/issues/3016 +[gh3024]: https://github.com/encode/django-rest-framework/issues/3024 +[gh3115]: https://github.com/encode/django-rest-framework/issues/3115 +[gh3139]: https://github.com/encode/django-rest-framework/issues/3139 +[gh3165]: https://github.com/encode/django-rest-framework/issues/3165 +[gh3216]: https://github.com/encode/django-rest-framework/issues/3216 +[gh3225]: https://github.com/encode/django-rest-framework/issues/3225 -[gh3237]: https://github.com/tomchristie/django-rest-framework/issues/3237 -[gh3227]: https://github.com/tomchristie/django-rest-framework/issues/3227 -[gh3238]: https://github.com/tomchristie/django-rest-framework/issues/3238 -[gh3239]: https://github.com/tomchristie/django-rest-framework/issues/3239 +[gh3237]: https://github.com/encode/django-rest-framework/issues/3237 +[gh3227]: https://github.com/encode/django-rest-framework/issues/3227 +[gh3238]: https://github.com/encode/django-rest-framework/issues/3238 +[gh3239]: https://github.com/encode/django-rest-framework/issues/3239 -[gh3254]: https://github.com/tomchristie/django-rest-framework/issues/3254 -[gh3258]: https://github.com/tomchristie/django-rest-framework/issues/3258 -[gh2776]: https://github.com/tomchristie/django-rest-framework/issues/2776 -[gh3261]: https://github.com/tomchristie/django-rest-framework/issues/3261 -[gh3260]: https://github.com/tomchristie/django-rest-framework/issues/3260 -[gh3241]: https://github.com/tomchristie/django-rest-framework/issues/3241 +[gh3254]: https://github.com/encode/django-rest-framework/issues/3254 +[gh3258]: https://github.com/encode/django-rest-framework/issues/3258 +[gh2776]: https://github.com/encode/django-rest-framework/issues/2776 +[gh3261]: https://github.com/encode/django-rest-framework/issues/3261 +[gh3260]: https://github.com/encode/django-rest-framework/issues/3260 +[gh3241]: https://github.com/encode/django-rest-framework/issues/3241 -[gh3249]: https://github.com/tomchristie/django-rest-framework/issues/3249 -[gh3250]: https://github.com/tomchristie/django-rest-framework/issues/3250 -[gh3275]: https://github.com/tomchristie/django-rest-framework/issues/3275 -[gh3288]: https://github.com/tomchristie/django-rest-framework/issues/3288 -[gh3290]: https://github.com/tomchristie/django-rest-framework/issues/3290 -[gh3303]: https://github.com/tomchristie/django-rest-framework/issues/3303 -[gh3313]: https://github.com/tomchristie/django-rest-framework/issues/3313 -[gh3316]: https://github.com/tomchristie/django-rest-framework/issues/3316 -[gh3318]: https://github.com/tomchristie/django-rest-framework/issues/3318 -[gh3321]: https://github.com/tomchristie/django-rest-framework/issues/3321 +[gh3249]: https://github.com/encode/django-rest-framework/issues/3249 +[gh3250]: https://github.com/encode/django-rest-framework/issues/3250 +[gh3275]: https://github.com/encode/django-rest-framework/issues/3275 +[gh3288]: https://github.com/encode/django-rest-framework/issues/3288 +[gh3290]: https://github.com/encode/django-rest-framework/issues/3290 +[gh3303]: https://github.com/encode/django-rest-framework/issues/3303 +[gh3313]: https://github.com/encode/django-rest-framework/issues/3313 +[gh3316]: https://github.com/encode/django-rest-framework/issues/3316 +[gh3318]: https://github.com/encode/django-rest-framework/issues/3318 +[gh3321]: https://github.com/encode/django-rest-framework/issues/3321 -[gh2761]: https://github.com/tomchristie/django-rest-framework/issues/2761 -[gh3314]: https://github.com/tomchristie/django-rest-framework/issues/3314 -[gh3323]: https://github.com/tomchristie/django-rest-framework/issues/3323 -[gh3324]: https://github.com/tomchristie/django-rest-framework/issues/3324 -[gh3359]: https://github.com/tomchristie/django-rest-framework/issues/3359 -[gh3361]: https://github.com/tomchristie/django-rest-framework/issues/3361 -[gh3364]: https://github.com/tomchristie/django-rest-framework/issues/3364 -[gh3415]: https://github.com/tomchristie/django-rest-framework/issues/3415 +[gh2761]: https://github.com/encode/django-rest-framework/issues/2761 +[gh3314]: https://github.com/encode/django-rest-framework/issues/3314 +[gh3323]: https://github.com/encode/django-rest-framework/issues/3323 +[gh3324]: https://github.com/encode/django-rest-framework/issues/3324 +[gh3359]: https://github.com/encode/django-rest-framework/issues/3359 +[gh3361]: https://github.com/encode/django-rest-framework/issues/3361 +[gh3364]: https://github.com/encode/django-rest-framework/issues/3364 +[gh3415]: https://github.com/encode/django-rest-framework/issues/3415 -[gh3550]:https://github.com/tomchristie/django-rest-framework/issues/3550 +[gh3550]:https://github.com/encode/django-rest-framework/issues/3550 -[gh3315]: https://github.com/tomchristie/django-rest-framework/issues/3315 -[gh3410]: https://github.com/tomchristie/django-rest-framework/issues/3410 -[gh3435]: https://github.com/tomchristie/django-rest-framework/issues/3435 -[gh3450]: https://github.com/tomchristie/django-rest-framework/issues/3450 -[gh3454]: https://github.com/tomchristie/django-rest-framework/issues/3454 -[gh3475]: https://github.com/tomchristie/django-rest-framework/issues/3475 -[gh3495]: https://github.com/tomchristie/django-rest-framework/issues/3495 -[gh3509]: https://github.com/tomchristie/django-rest-framework/issues/3509 -[gh3421]: https://github.com/tomchristie/django-rest-framework/issues/3421 -[gh3525]: https://github.com/tomchristie/django-rest-framework/issues/3525 -[gh3526]: https://github.com/tomchristie/django-rest-framework/issues/3526 -[gh3429]: https://github.com/tomchristie/django-rest-framework/issues/3429 -[gh3536]: https://github.com/tomchristie/django-rest-framework/issues/3536 +[gh3315]: https://github.com/encode/django-rest-framework/issues/3315 +[gh3410]: https://github.com/encode/django-rest-framework/issues/3410 +[gh3435]: https://github.com/encode/django-rest-framework/issues/3435 +[gh3450]: https://github.com/encode/django-rest-framework/issues/3450 +[gh3454]: https://github.com/encode/django-rest-framework/issues/3454 +[gh3475]: https://github.com/encode/django-rest-framework/issues/3475 +[gh3495]: https://github.com/encode/django-rest-framework/issues/3495 +[gh3509]: https://github.com/encode/django-rest-framework/issues/3509 +[gh3421]: https://github.com/encode/django-rest-framework/issues/3421 +[gh3525]: https://github.com/encode/django-rest-framework/issues/3525 +[gh3526]: https://github.com/encode/django-rest-framework/issues/3526 +[gh3429]: https://github.com/encode/django-rest-framework/issues/3429 +[gh3536]: https://github.com/encode/django-rest-framework/issues/3536 -[gh3556]: https://github.com/tomchristie/django-rest-framework/issues/3556 -[gh3560]: https://github.com/tomchristie/django-rest-framework/issues/3560 -[gh3564]: https://github.com/tomchristie/django-rest-framework/issues/3564 -[gh3568]: https://github.com/tomchristie/django-rest-framework/issues/3568 -[gh3592]: https://github.com/tomchristie/django-rest-framework/issues/3592 -[gh3593]: https://github.com/tomchristie/django-rest-framework/issues/3593 +[gh3556]: https://github.com/encode/django-rest-framework/issues/3556 +[gh3560]: https://github.com/encode/django-rest-framework/issues/3560 +[gh3564]: https://github.com/encode/django-rest-framework/issues/3564 +[gh3568]: https://github.com/encode/django-rest-framework/issues/3568 +[gh3592]: https://github.com/encode/django-rest-framework/issues/3592 +[gh3593]: https://github.com/encode/django-rest-framework/issues/3593 -[gh3228]: https://github.com/tomchristie/django-rest-framework/issues/3228 -[gh3252]: https://github.com/tomchristie/django-rest-framework/issues/3252 -[gh3513]: https://github.com/tomchristie/django-rest-framework/issues/3513 -[gh3534]: https://github.com/tomchristie/django-rest-framework/issues/3534 -[gh3578]: https://github.com/tomchristie/django-rest-framework/issues/3578 -[gh3596]: https://github.com/tomchristie/django-rest-framework/issues/3596 -[gh3597]: https://github.com/tomchristie/django-rest-framework/issues/3597 -[gh3600]: https://github.com/tomchristie/django-rest-framework/issues/3600 -[gh3626]: https://github.com/tomchristie/django-rest-framework/issues/3626 -[gh3628]: https://github.com/tomchristie/django-rest-framework/issues/3628 -[gh3631]: https://github.com/tomchristie/django-rest-framework/issues/3631 -[gh3634]: https://github.com/tomchristie/django-rest-framework/issues/3634 -[gh3635]: https://github.com/tomchristie/django-rest-framework/issues/3635 -[gh3654]: https://github.com/tomchristie/django-rest-framework/issues/3654 -[gh3655]: https://github.com/tomchristie/django-rest-framework/issues/3655 -[gh3656]: https://github.com/tomchristie/django-rest-framework/issues/3656 -[gh3662]: https://github.com/tomchristie/django-rest-framework/issues/3662 -[gh3668]: https://github.com/tomchristie/django-rest-framework/issues/3668 -[gh3672]: https://github.com/tomchristie/django-rest-framework/issues/3672 -[gh3677]: https://github.com/tomchristie/django-rest-framework/issues/3677 -[gh3679]: https://github.com/tomchristie/django-rest-framework/issues/3679 -[gh3684]: https://github.com/tomchristie/django-rest-framework/issues/3684 -[gh3687]: https://github.com/tomchristie/django-rest-framework/issues/3687 -[gh3701]: https://github.com/tomchristie/django-rest-framework/issues/3701 -[gh3705]: https://github.com/tomchristie/django-rest-framework/issues/3705 -[gh3714]: https://github.com/tomchristie/django-rest-framework/issues/3714 -[gh3718]: https://github.com/tomchristie/django-rest-framework/issues/3718 -[gh3723]: https://github.com/tomchristie/django-rest-framework/issues/3723 +[gh3228]: https://github.com/encode/django-rest-framework/issues/3228 +[gh3252]: https://github.com/encode/django-rest-framework/issues/3252 +[gh3513]: https://github.com/encode/django-rest-framework/issues/3513 +[gh3534]: https://github.com/encode/django-rest-framework/issues/3534 +[gh3578]: https://github.com/encode/django-rest-framework/issues/3578 +[gh3596]: https://github.com/encode/django-rest-framework/issues/3596 +[gh3597]: https://github.com/encode/django-rest-framework/issues/3597 +[gh3600]: https://github.com/encode/django-rest-framework/issues/3600 +[gh3626]: https://github.com/encode/django-rest-framework/issues/3626 +[gh3628]: https://github.com/encode/django-rest-framework/issues/3628 +[gh3631]: https://github.com/encode/django-rest-framework/issues/3631 +[gh3634]: https://github.com/encode/django-rest-framework/issues/3634 +[gh3635]: https://github.com/encode/django-rest-framework/issues/3635 +[gh3654]: https://github.com/encode/django-rest-framework/issues/3654 +[gh3655]: https://github.com/encode/django-rest-framework/issues/3655 +[gh3656]: https://github.com/encode/django-rest-framework/issues/3656 +[gh3662]: https://github.com/encode/django-rest-framework/issues/3662 +[gh3668]: https://github.com/encode/django-rest-framework/issues/3668 +[gh3672]: https://github.com/encode/django-rest-framework/issues/3672 +[gh3677]: https://github.com/encode/django-rest-framework/issues/3677 +[gh3679]: https://github.com/encode/django-rest-framework/issues/3679 +[gh3684]: https://github.com/encode/django-rest-framework/issues/3684 +[gh3687]: https://github.com/encode/django-rest-framework/issues/3687 +[gh3701]: https://github.com/encode/django-rest-framework/issues/3701 +[gh3705]: https://github.com/encode/django-rest-framework/issues/3705 +[gh3714]: https://github.com/encode/django-rest-framework/issues/3714 +[gh3718]: https://github.com/encode/django-rest-framework/issues/3718 +[gh3723]: https://github.com/encode/django-rest-framework/issues/3723 -[gh3968]: https://github.com/tomchristie/django-rest-framework/issues/3968 -[gh3962]: https://github.com/tomchristie/django-rest-framework/issues/3962 -[gh3913]: https://github.com/tomchristie/django-rest-framework/issues/3913 -[gh3912]: https://github.com/tomchristie/django-rest-framework/issues/3912 -[gh3910]: https://github.com/tomchristie/django-rest-framework/issues/3910 -[gh3903]: https://github.com/tomchristie/django-rest-framework/issues/3903 -[gh3887]: https://github.com/tomchristie/django-rest-framework/issues/3887 -[gh3878]: https://github.com/tomchristie/django-rest-framework/issues/3878 -[gh3860]: https://github.com/tomchristie/django-rest-framework/issues/3860 -[gh3858]: https://github.com/tomchristie/django-rest-framework/issues/3858 -[gh3842]: https://github.com/tomchristie/django-rest-framework/issues/3842 -[gh3833]: https://github.com/tomchristie/django-rest-framework/issues/3833 -[gh3832]: https://github.com/tomchristie/django-rest-framework/issues/3832 -[gh3819]: https://github.com/tomchristie/django-rest-framework/issues/3819 -[gh3815]: https://github.com/tomchristie/django-rest-framework/issues/3815 -[gh3809]: https://github.com/tomchristie/django-rest-framework/issues/3809 -[gh3805]: https://github.com/tomchristie/django-rest-framework/issues/3805 -[gh3804]: https://github.com/tomchristie/django-rest-framework/issues/3804 -[gh3801]: https://github.com/tomchristie/django-rest-framework/issues/3801 -[gh3787]: https://github.com/tomchristie/django-rest-framework/issues/3787 -[gh3786]: https://github.com/tomchristie/django-rest-framework/issues/3786 -[gh3785]: https://github.com/tomchristie/django-rest-framework/issues/3785 -[gh3774]: https://github.com/tomchristie/django-rest-framework/issues/3774 -[gh3769]: https://github.com/tomchristie/django-rest-framework/issues/3769 -[gh3753]: https://github.com/tomchristie/django-rest-framework/issues/3753 -[gh3739]: https://github.com/tomchristie/django-rest-framework/issues/3739 -[gh3731]: https://github.com/tomchristie/django-rest-framework/issues/3731 -[gh3728]: https://github.com/tomchristie/django-rest-framework/issues/3726 -[gh3715]: https://github.com/tomchristie/django-rest-framework/issues/3715 -[gh3703]: https://github.com/tomchristie/django-rest-framework/issues/3703 -[gh3696]: https://github.com/tomchristie/django-rest-framework/issues/3696 -[gh3637]: https://github.com/tomchristie/django-rest-framework/issues/3637 -[gh3636]: https://github.com/tomchristie/django-rest-framework/issues/3636 -[gh3605]: https://github.com/tomchristie/django-rest-framework/issues/3605 -[gh3604]: https://github.com/tomchristie/django-rest-framework/issues/3604 +[gh3968]: https://github.com/encode/django-rest-framework/issues/3968 +[gh3962]: https://github.com/encode/django-rest-framework/issues/3962 +[gh3913]: https://github.com/encode/django-rest-framework/issues/3913 +[gh3912]: https://github.com/encode/django-rest-framework/issues/3912 +[gh3910]: https://github.com/encode/django-rest-framework/issues/3910 +[gh3903]: https://github.com/encode/django-rest-framework/issues/3903 +[gh3887]: https://github.com/encode/django-rest-framework/issues/3887 +[gh3878]: https://github.com/encode/django-rest-framework/issues/3878 +[gh3860]: https://github.com/encode/django-rest-framework/issues/3860 +[gh3858]: https://github.com/encode/django-rest-framework/issues/3858 +[gh3842]: https://github.com/encode/django-rest-framework/issues/3842 +[gh3833]: https://github.com/encode/django-rest-framework/issues/3833 +[gh3832]: https://github.com/encode/django-rest-framework/issues/3832 +[gh3819]: https://github.com/encode/django-rest-framework/issues/3819 +[gh3815]: https://github.com/encode/django-rest-framework/issues/3815 +[gh3809]: https://github.com/encode/django-rest-framework/issues/3809 +[gh3805]: https://github.com/encode/django-rest-framework/issues/3805 +[gh3804]: https://github.com/encode/django-rest-framework/issues/3804 +[gh3801]: https://github.com/encode/django-rest-framework/issues/3801 +[gh3787]: https://github.com/encode/django-rest-framework/issues/3787 +[gh3786]: https://github.com/encode/django-rest-framework/issues/3786 +[gh3785]: https://github.com/encode/django-rest-framework/issues/3785 +[gh3774]: https://github.com/encode/django-rest-framework/issues/3774 +[gh3769]: https://github.com/encode/django-rest-framework/issues/3769 +[gh3753]: https://github.com/encode/django-rest-framework/issues/3753 +[gh3739]: https://github.com/encode/django-rest-framework/issues/3739 +[gh3731]: https://github.com/encode/django-rest-framework/issues/3731 +[gh3728]: https://github.com/encode/django-rest-framework/issues/3726 +[gh3715]: https://github.com/encode/django-rest-framework/issues/3715 +[gh3703]: https://github.com/encode/django-rest-framework/issues/3703 +[gh3696]: https://github.com/encode/django-rest-framework/issues/3696 +[gh3637]: https://github.com/encode/django-rest-framework/issues/3637 +[gh3636]: https://github.com/encode/django-rest-framework/issues/3636 +[gh3605]: https://github.com/encode/django-rest-framework/issues/3605 +[gh3604]: https://github.com/encode/django-rest-framework/issues/3604 -[gh2403]: https://github.com/tomchristie/django-rest-framework/issues/2403 -[gh2848]: https://github.com/tomchristie/django-rest-framework/issues/2848 -[gh2996]: https://github.com/tomchristie/django-rest-framework/issues/2996 -[gh3164]: https://github.com/tomchristie/django-rest-framework/issues/3164 -[gh3273]: https://github.com/tomchristie/django-rest-framework/issues/3273 -[gh3381]: https://github.com/tomchristie/django-rest-framework/issues/3381 -[gh3438]: https://github.com/tomchristie/django-rest-framework/issues/3438 -[gh3444]: https://github.com/tomchristie/django-rest-framework/issues/3444 -[gh3476]: https://github.com/tomchristie/django-rest-framework/issues/3476 -[gh3487]: https://github.com/tomchristie/django-rest-framework/issues/3487 -[gh3541]: https://github.com/tomchristie/django-rest-framework/issues/3541 -[gh3710]: https://github.com/tomchristie/django-rest-framework/issues/3710 -[gh3729]: https://github.com/tomchristie/django-rest-framework/issues/3729 -[gh3751]: https://github.com/tomchristie/django-rest-framework/issues/3751 -[gh3812]: https://github.com/tomchristie/django-rest-framework/issues/3812 -[gh3816]: https://github.com/tomchristie/django-rest-framework/issues/3816 -[gh3820]: https://github.com/tomchristie/django-rest-framework/issues/3820 -[gh3906]: https://github.com/tomchristie/django-rest-framework/issues/3906 -[gh3908]: https://github.com/tomchristie/django-rest-framework/issues/3908 -[gh3926]: https://github.com/tomchristie/django-rest-framework/issues/3926 -[gh3933]: https://github.com/tomchristie/django-rest-framework/issues/3933 -[gh3936]: https://github.com/tomchristie/django-rest-framework/issues/3936 -[gh3938]: https://github.com/tomchristie/django-rest-framework/issues/3938 -[gh3943]: https://github.com/tomchristie/django-rest-framework/issues/3943 -[gh3953]: https://github.com/tomchristie/django-rest-framework/issues/3953 -[gh3964]: https://github.com/tomchristie/django-rest-framework/issues/3964 -[gh3968]: https://github.com/tomchristie/django-rest-framework/issues/3968 -[gh3970]: https://github.com/tomchristie/django-rest-framework/issues/3970 -[gh3971]: https://github.com/tomchristie/django-rest-framework/issues/3971 -[gh3976]: https://github.com/tomchristie/django-rest-framework/issues/3976 -[gh3983]: https://github.com/tomchristie/django-rest-framework/issues/3983 -[gh3990]: https://github.com/tomchristie/django-rest-framework/issues/3990 -[gh4002]: https://github.com/tomchristie/django-rest-framework/issues/4002 -[gh4003]: https://github.com/tomchristie/django-rest-framework/issues/4003 -[gh4005]: https://github.com/tomchristie/django-rest-framework/issues/4005 -[gh4006]: https://github.com/tomchristie/django-rest-framework/issues/4006 -[gh4008]: https://github.com/tomchristie/django-rest-framework/issues/4008 -[gh4021]: https://github.com/tomchristie/django-rest-framework/issues/4021 -[gh4025]: https://github.com/tomchristie/django-rest-framework/issues/4025 -[gh4040]: https://github.com/tomchristie/django-rest-framework/issues/4040 -[gh4041]: https://github.com/tomchristie/django-rest-framework/issues/4041 -[gh4049]: https://github.com/tomchristie/django-rest-framework/issues/4049 -[gh4075]: https://github.com/tomchristie/django-rest-framework/issues/4075 -[gh4079]: https://github.com/tomchristie/django-rest-framework/issues/4079 -[gh4090]: https://github.com/tomchristie/django-rest-framework/issues/4090 -[gh4097]: https://github.com/tomchristie/django-rest-framework/issues/4097 -[gh4098]: https://github.com/tomchristie/django-rest-framework/issues/4098 -[gh4103]: https://github.com/tomchristie/django-rest-framework/issues/4103 -[gh4105]: https://github.com/tomchristie/django-rest-framework/issues/4105 -[gh4106]: https://github.com/tomchristie/django-rest-framework/issues/4106 -[gh4107]: https://github.com/tomchristie/django-rest-framework/issues/4107 -[gh4118]: https://github.com/tomchristie/django-rest-framework/issues/4118 -[gh4146]: https://github.com/tomchristie/django-rest-framework/issues/4146 -[gh4149]: https://github.com/tomchristie/django-rest-framework/issues/4149 -[gh4153]: https://github.com/tomchristie/django-rest-framework/issues/4153 -[gh4156]: https://github.com/tomchristie/django-rest-framework/issues/4156 -[gh4157]: https://github.com/tomchristie/django-rest-framework/issues/4157 -[gh4158]: https://github.com/tomchristie/django-rest-framework/issues/4158 -[gh4166]: https://github.com/tomchristie/django-rest-framework/issues/4166 -[gh4176]: https://github.com/tomchristie/django-rest-framework/issues/4176 -[gh4179]: https://github.com/tomchristie/django-rest-framework/issues/4179 -[gh4180]: https://github.com/tomchristie/django-rest-framework/issues/4180 -[gh4181]: https://github.com/tomchristie/django-rest-framework/issues/4181 -[gh4185]: https://github.com/tomchristie/django-rest-framework/issues/4185 -[gh4187]: https://github.com/tomchristie/django-rest-framework/issues/4187 -[gh4191]: https://github.com/tomchristie/django-rest-framework/issues/4191 -[gh4192]: https://github.com/tomchristie/django-rest-framework/issues/4192 -[gh4194]: https://github.com/tomchristie/django-rest-framework/issues/4194 -[gh4195]: https://github.com/tomchristie/django-rest-framework/issues/4195 -[gh4196]: https://github.com/tomchristie/django-rest-framework/issues/4196 -[gh4212]: https://github.com/tomchristie/django-rest-framework/issues/4212 -[gh4215]: https://github.com/tomchristie/django-rest-framework/issues/4215 -[gh4217]: https://github.com/tomchristie/django-rest-framework/issues/4217 -[gh4219]: https://github.com/tomchristie/django-rest-framework/issues/4219 -[gh4229]: https://github.com/tomchristie/django-rest-framework/issues/4229 -[gh4233]: https://github.com/tomchristie/django-rest-framework/issues/4233 -[gh4244]: https://github.com/tomchristie/django-rest-framework/issues/4244 -[gh4246]: https://github.com/tomchristie/django-rest-framework/issues/4246 -[gh4253]: https://github.com/tomchristie/django-rest-framework/issues/4253 -[gh4254]: https://github.com/tomchristie/django-rest-framework/issues/4254 -[gh4255]: https://github.com/tomchristie/django-rest-framework/issues/4255 -[gh4256]: https://github.com/tomchristie/django-rest-framework/issues/4256 -[gh4259]: https://github.com/tomchristie/django-rest-framework/issues/4259 +[gh2403]: https://github.com/encode/django-rest-framework/issues/2403 +[gh2848]: https://github.com/encode/django-rest-framework/issues/2848 +[gh2996]: https://github.com/encode/django-rest-framework/issues/2996 +[gh3164]: https://github.com/encode/django-rest-framework/issues/3164 +[gh3273]: https://github.com/encode/django-rest-framework/issues/3273 +[gh3381]: https://github.com/encode/django-rest-framework/issues/3381 +[gh3438]: https://github.com/encode/django-rest-framework/issues/3438 +[gh3444]: https://github.com/encode/django-rest-framework/issues/3444 +[gh3476]: https://github.com/encode/django-rest-framework/issues/3476 +[gh3487]: https://github.com/encode/django-rest-framework/issues/3487 +[gh3541]: https://github.com/encode/django-rest-framework/issues/3541 +[gh3710]: https://github.com/encode/django-rest-framework/issues/3710 +[gh3729]: https://github.com/encode/django-rest-framework/issues/3729 +[gh3751]: https://github.com/encode/django-rest-framework/issues/3751 +[gh3812]: https://github.com/encode/django-rest-framework/issues/3812 +[gh3816]: https://github.com/encode/django-rest-framework/issues/3816 +[gh3820]: https://github.com/encode/django-rest-framework/issues/3820 +[gh3906]: https://github.com/encode/django-rest-framework/issues/3906 +[gh3908]: https://github.com/encode/django-rest-framework/issues/3908 +[gh3926]: https://github.com/encode/django-rest-framework/issues/3926 +[gh3933]: https://github.com/encode/django-rest-framework/issues/3933 +[gh3936]: https://github.com/encode/django-rest-framework/issues/3936 +[gh3938]: https://github.com/encode/django-rest-framework/issues/3938 +[gh3943]: https://github.com/encode/django-rest-framework/issues/3943 +[gh3953]: https://github.com/encode/django-rest-framework/issues/3953 +[gh3964]: https://github.com/encode/django-rest-framework/issues/3964 +[gh3968]: https://github.com/encode/django-rest-framework/issues/3968 +[gh3970]: https://github.com/encode/django-rest-framework/issues/3970 +[gh3971]: https://github.com/encode/django-rest-framework/issues/3971 +[gh3976]: https://github.com/encode/django-rest-framework/issues/3976 +[gh3983]: https://github.com/encode/django-rest-framework/issues/3983 +[gh3990]: https://github.com/encode/django-rest-framework/issues/3990 +[gh4002]: https://github.com/encode/django-rest-framework/issues/4002 +[gh4003]: https://github.com/encode/django-rest-framework/issues/4003 +[gh4005]: https://github.com/encode/django-rest-framework/issues/4005 +[gh4006]: https://github.com/encode/django-rest-framework/issues/4006 +[gh4008]: https://github.com/encode/django-rest-framework/issues/4008 +[gh4021]: https://github.com/encode/django-rest-framework/issues/4021 +[gh4025]: https://github.com/encode/django-rest-framework/issues/4025 +[gh4040]: https://github.com/encode/django-rest-framework/issues/4040 +[gh4041]: https://github.com/encode/django-rest-framework/issues/4041 +[gh4049]: https://github.com/encode/django-rest-framework/issues/4049 +[gh4075]: https://github.com/encode/django-rest-framework/issues/4075 +[gh4079]: https://github.com/encode/django-rest-framework/issues/4079 +[gh4090]: https://github.com/encode/django-rest-framework/issues/4090 +[gh4097]: https://github.com/encode/django-rest-framework/issues/4097 +[gh4098]: https://github.com/encode/django-rest-framework/issues/4098 +[gh4103]: https://github.com/encode/django-rest-framework/issues/4103 +[gh4105]: https://github.com/encode/django-rest-framework/issues/4105 +[gh4106]: https://github.com/encode/django-rest-framework/issues/4106 +[gh4107]: https://github.com/encode/django-rest-framework/issues/4107 +[gh4118]: https://github.com/encode/django-rest-framework/issues/4118 +[gh4146]: https://github.com/encode/django-rest-framework/issues/4146 +[gh4149]: https://github.com/encode/django-rest-framework/issues/4149 +[gh4153]: https://github.com/encode/django-rest-framework/issues/4153 +[gh4156]: https://github.com/encode/django-rest-framework/issues/4156 +[gh4157]: https://github.com/encode/django-rest-framework/issues/4157 +[gh4158]: https://github.com/encode/django-rest-framework/issues/4158 +[gh4166]: https://github.com/encode/django-rest-framework/issues/4166 +[gh4176]: https://github.com/encode/django-rest-framework/issues/4176 +[gh4179]: https://github.com/encode/django-rest-framework/issues/4179 +[gh4180]: https://github.com/encode/django-rest-framework/issues/4180 +[gh4181]: https://github.com/encode/django-rest-framework/issues/4181 +[gh4185]: https://github.com/encode/django-rest-framework/issues/4185 +[gh4187]: https://github.com/encode/django-rest-framework/issues/4187 +[gh4191]: https://github.com/encode/django-rest-framework/issues/4191 +[gh4192]: https://github.com/encode/django-rest-framework/issues/4192 +[gh4194]: https://github.com/encode/django-rest-framework/issues/4194 +[gh4195]: https://github.com/encode/django-rest-framework/issues/4195 +[gh4196]: https://github.com/encode/django-rest-framework/issues/4196 +[gh4212]: https://github.com/encode/django-rest-framework/issues/4212 +[gh4215]: https://github.com/encode/django-rest-framework/issues/4215 +[gh4217]: https://github.com/encode/django-rest-framework/issues/4217 +[gh4219]: https://github.com/encode/django-rest-framework/issues/4219 +[gh4229]: https://github.com/encode/django-rest-framework/issues/4229 +[gh4233]: https://github.com/encode/django-rest-framework/issues/4233 +[gh4244]: https://github.com/encode/django-rest-framework/issues/4244 +[gh4246]: https://github.com/encode/django-rest-framework/issues/4246 +[gh4253]: https://github.com/encode/django-rest-framework/issues/4253 +[gh4254]: https://github.com/encode/django-rest-framework/issues/4254 +[gh4255]: https://github.com/encode/django-rest-framework/issues/4255 +[gh4256]: https://github.com/encode/django-rest-framework/issues/4256 +[gh4259]: https://github.com/encode/django-rest-framework/issues/4259 -[gh4323]: https://github.com/tomchristie/django-rest-framework/issues/4323 -[gh4268]: https://github.com/tomchristie/django-rest-framework/issues/4268 -[gh4321]: https://github.com/tomchristie/django-rest-framework/issues/4321 -[gh4308]: https://github.com/tomchristie/django-rest-framework/issues/4308 -[gh4305]: https://github.com/tomchristie/django-rest-framework/issues/4305 -[gh4316]: https://github.com/tomchristie/django-rest-framework/issues/4316 -[gh4294]: https://github.com/tomchristie/django-rest-framework/issues/4294 -[gh4293]: https://github.com/tomchristie/django-rest-framework/issues/4293 -[gh4315]: https://github.com/tomchristie/django-rest-framework/issues/4315 -[gh4314]: https://github.com/tomchristie/django-rest-framework/issues/4314 -[gh4289]: https://github.com/tomchristie/django-rest-framework/issues/4289 -[gh4265]: https://github.com/tomchristie/django-rest-framework/issues/4265 -[gh4285]: https://github.com/tomchristie/django-rest-framework/issues/4285 -[gh4287]: https://github.com/tomchristie/django-rest-framework/issues/4287 -[gh4313]: https://github.com/tomchristie/django-rest-framework/issues/4313 -[gh4281]: https://github.com/tomchristie/django-rest-framework/issues/4281 -[gh4299]: https://github.com/tomchristie/django-rest-framework/issues/4299 -[gh4307]: https://github.com/tomchristie/django-rest-framework/issues/4307 -[gh4302]: https://github.com/tomchristie/django-rest-framework/issues/4302 -[gh4303]: https://github.com/tomchristie/django-rest-framework/issues/4303 -[gh4298]: https://github.com/tomchristie/django-rest-framework/issues/4298 -[gh4291]: https://github.com/tomchristie/django-rest-framework/issues/4291 -[gh4270]: https://github.com/tomchristie/django-rest-framework/issues/4270 -[gh4272]: https://github.com/tomchristie/django-rest-framework/issues/4272 -[gh4273]: https://github.com/tomchristie/django-rest-framework/issues/4273 -[gh4288]: https://github.com/tomchristie/django-rest-framework/issues/4288 +[gh4323]: https://github.com/encode/django-rest-framework/issues/4323 +[gh4268]: https://github.com/encode/django-rest-framework/issues/4268 +[gh4321]: https://github.com/encode/django-rest-framework/issues/4321 +[gh4308]: https://github.com/encode/django-rest-framework/issues/4308 +[gh4305]: https://github.com/encode/django-rest-framework/issues/4305 +[gh4316]: https://github.com/encode/django-rest-framework/issues/4316 +[gh4294]: https://github.com/encode/django-rest-framework/issues/4294 +[gh4293]: https://github.com/encode/django-rest-framework/issues/4293 +[gh4315]: https://github.com/encode/django-rest-framework/issues/4315 +[gh4314]: https://github.com/encode/django-rest-framework/issues/4314 +[gh4289]: https://github.com/encode/django-rest-framework/issues/4289 +[gh4265]: https://github.com/encode/django-rest-framework/issues/4265 +[gh4285]: https://github.com/encode/django-rest-framework/issues/4285 +[gh4287]: https://github.com/encode/django-rest-framework/issues/4287 +[gh4313]: https://github.com/encode/django-rest-framework/issues/4313 +[gh4281]: https://github.com/encode/django-rest-framework/issues/4281 +[gh4299]: https://github.com/encode/django-rest-framework/issues/4299 +[gh4307]: https://github.com/encode/django-rest-framework/issues/4307 +[gh4302]: https://github.com/encode/django-rest-framework/issues/4302 +[gh4303]: https://github.com/encode/django-rest-framework/issues/4303 +[gh4298]: https://github.com/encode/django-rest-framework/issues/4298 +[gh4291]: https://github.com/encode/django-rest-framework/issues/4291 +[gh4270]: https://github.com/encode/django-rest-framework/issues/4270 +[gh4272]: https://github.com/encode/django-rest-framework/issues/4272 +[gh4273]: https://github.com/encode/django-rest-framework/issues/4273 +[gh4288]: https://github.com/encode/django-rest-framework/issues/4288 -[gh3565]: https://github.com/tomchristie/django-rest-framework/issues/3565 -[gh3610]: https://github.com/tomchristie/django-rest-framework/issues/3610 -[gh4198]: https://github.com/tomchristie/django-rest-framework/issues/4198 -[gh4199]: https://github.com/tomchristie/django-rest-framework/issues/4199 -[gh4236]: https://github.com/tomchristie/django-rest-framework/issues/4236 -[gh4292]: https://github.com/tomchristie/django-rest-framework/issues/4292 -[gh4296]: https://github.com/tomchristie/django-rest-framework/issues/4296 -[gh4318]: https://github.com/tomchristie/django-rest-framework/issues/4318 -[gh4330]: https://github.com/tomchristie/django-rest-framework/issues/4330 -[gh4331]: https://github.com/tomchristie/django-rest-framework/issues/4331 -[gh4332]: https://github.com/tomchristie/django-rest-framework/issues/4332 -[gh4335]: https://github.com/tomchristie/django-rest-framework/issues/4335 -[gh4336]: https://github.com/tomchristie/django-rest-framework/issues/4336 -[gh4338]: https://github.com/tomchristie/django-rest-framework/issues/4338 -[gh4339]: https://github.com/tomchristie/django-rest-framework/issues/4339 -[gh4340]: https://github.com/tomchristie/django-rest-framework/issues/4340 -[gh4344]: https://github.com/tomchristie/django-rest-framework/issues/4344 -[gh4345]: https://github.com/tomchristie/django-rest-framework/issues/4345 -[gh4346]: https://github.com/tomchristie/django-rest-framework/issues/4346 -[gh4347]: https://github.com/tomchristie/django-rest-framework/issues/4347 -[gh4348]: https://github.com/tomchristie/django-rest-framework/issues/4348 -[gh4349]: https://github.com/tomchristie/django-rest-framework/issues/4349 -[gh4354]: https://github.com/tomchristie/django-rest-framework/issues/4354 -[gh4357]: https://github.com/tomchristie/django-rest-framework/issues/4357 -[gh4358]: https://github.com/tomchristie/django-rest-framework/issues/4358 -[gh4359]: https://github.com/tomchristie/django-rest-framework/issues/4359 +[gh3565]: https://github.com/encode/django-rest-framework/issues/3565 +[gh3610]: https://github.com/encode/django-rest-framework/issues/3610 +[gh4198]: https://github.com/encode/django-rest-framework/issues/4198 +[gh4199]: https://github.com/encode/django-rest-framework/issues/4199 +[gh4236]: https://github.com/encode/django-rest-framework/issues/4236 +[gh4292]: https://github.com/encode/django-rest-framework/issues/4292 +[gh4296]: https://github.com/encode/django-rest-framework/issues/4296 +[gh4318]: https://github.com/encode/django-rest-framework/issues/4318 +[gh4330]: https://github.com/encode/django-rest-framework/issues/4330 +[gh4331]: https://github.com/encode/django-rest-framework/issues/4331 +[gh4332]: https://github.com/encode/django-rest-framework/issues/4332 +[gh4335]: https://github.com/encode/django-rest-framework/issues/4335 +[gh4336]: https://github.com/encode/django-rest-framework/issues/4336 +[gh4338]: https://github.com/encode/django-rest-framework/issues/4338 +[gh4339]: https://github.com/encode/django-rest-framework/issues/4339 +[gh4340]: https://github.com/encode/django-rest-framework/issues/4340 +[gh4344]: https://github.com/encode/django-rest-framework/issues/4344 +[gh4345]: https://github.com/encode/django-rest-framework/issues/4345 +[gh4346]: https://github.com/encode/django-rest-framework/issues/4346 +[gh4347]: https://github.com/encode/django-rest-framework/issues/4347 +[gh4348]: https://github.com/encode/django-rest-framework/issues/4348 +[gh4349]: https://github.com/encode/django-rest-framework/issues/4349 +[gh4354]: https://github.com/encode/django-rest-framework/issues/4354 +[gh4357]: https://github.com/encode/django-rest-framework/issues/4357 +[gh4358]: https://github.com/encode/django-rest-framework/issues/4358 +[gh4359]: https://github.com/encode/django-rest-framework/issues/4359 -[gh4361]: https://github.com/tomchristie/django-rest-framework/issues/4361 +[gh4361]: https://github.com/encode/django-rest-framework/issues/4361 -[gh2829]: https://github.com/tomchristie/django-rest-framework/issues/2829 -[gh3329]: https://github.com/tomchristie/django-rest-framework/issues/3329 -[gh3330]: https://github.com/tomchristie/django-rest-framework/issues/3330 -[gh3365]: https://github.com/tomchristie/django-rest-framework/issues/3365 -[gh3394]: https://github.com/tomchristie/django-rest-framework/issues/3394 -[gh3868]: https://github.com/tomchristie/django-rest-framework/issues/3868 -[gh3868]: https://github.com/tomchristie/django-rest-framework/issues/3868 -[gh3877]: https://github.com/tomchristie/django-rest-framework/issues/3877 -[gh4042]: https://github.com/tomchristie/django-rest-framework/issues/4042 -[gh4111]: https://github.com/tomchristie/django-rest-framework/issues/4111 -[gh4119]: https://github.com/tomchristie/django-rest-framework/issues/4119 -[gh4120]: https://github.com/tomchristie/django-rest-framework/issues/4120 -[gh4121]: https://github.com/tomchristie/django-rest-framework/issues/4121 -[gh4122]: https://github.com/tomchristie/django-rest-framework/issues/4122 -[gh4137]: https://github.com/tomchristie/django-rest-framework/issues/4137 -[gh4172]: https://github.com/tomchristie/django-rest-framework/issues/4172 -[gh4201]: https://github.com/tomchristie/django-rest-framework/issues/4201 -[gh4260]: https://github.com/tomchristie/django-rest-framework/issues/4260 -[gh4278]: https://github.com/tomchristie/django-rest-framework/issues/4278 -[gh4279]: https://github.com/tomchristie/django-rest-framework/issues/4279 -[gh4329]: https://github.com/tomchristie/django-rest-framework/issues/4329 -[gh4370]: https://github.com/tomchristie/django-rest-framework/issues/4370 -[gh4371]: https://github.com/tomchristie/django-rest-framework/issues/4371 -[gh4372]: https://github.com/tomchristie/django-rest-framework/issues/4372 -[gh4373]: https://github.com/tomchristie/django-rest-framework/issues/4373 -[gh4374]: https://github.com/tomchristie/django-rest-framework/issues/4374 -[gh4375]: https://github.com/tomchristie/django-rest-framework/issues/4375 -[gh4376]: https://github.com/tomchristie/django-rest-framework/issues/4376 -[gh4377]: https://github.com/tomchristie/django-rest-framework/issues/4377 -[gh4378]: https://github.com/tomchristie/django-rest-framework/issues/4378 -[gh4379]: https://github.com/tomchristie/django-rest-framework/issues/4379 -[gh4380]: https://github.com/tomchristie/django-rest-framework/issues/4380 -[gh4382]: https://github.com/tomchristie/django-rest-framework/issues/4382 -[gh4383]: https://github.com/tomchristie/django-rest-framework/issues/4383 -[gh4386]: https://github.com/tomchristie/django-rest-framework/issues/4386 -[gh4387]: https://github.com/tomchristie/django-rest-framework/issues/4387 -[gh4388]: https://github.com/tomchristie/django-rest-framework/issues/4388 -[gh4390]: https://github.com/tomchristie/django-rest-framework/issues/4390 -[gh4391]: https://github.com/tomchristie/django-rest-framework/issues/4391 -[gh4392]: https://github.com/tomchristie/django-rest-framework/issues/4392 -[gh4393]: https://github.com/tomchristie/django-rest-framework/issues/4393 -[gh4394]: https://github.com/tomchristie/django-rest-framework/issues/4394 +[gh2829]: https://github.com/encode/django-rest-framework/issues/2829 +[gh3329]: https://github.com/encode/django-rest-framework/issues/3329 +[gh3330]: https://github.com/encode/django-rest-framework/issues/3330 +[gh3365]: https://github.com/encode/django-rest-framework/issues/3365 +[gh3394]: https://github.com/encode/django-rest-framework/issues/3394 +[gh3868]: https://github.com/encode/django-rest-framework/issues/3868 +[gh3868]: https://github.com/encode/django-rest-framework/issues/3868 +[gh3877]: https://github.com/encode/django-rest-framework/issues/3877 +[gh4042]: https://github.com/encode/django-rest-framework/issues/4042 +[gh4111]: https://github.com/encode/django-rest-framework/issues/4111 +[gh4119]: https://github.com/encode/django-rest-framework/issues/4119 +[gh4120]: https://github.com/encode/django-rest-framework/issues/4120 +[gh4121]: https://github.com/encode/django-rest-framework/issues/4121 +[gh4122]: https://github.com/encode/django-rest-framework/issues/4122 +[gh4137]: https://github.com/encode/django-rest-framework/issues/4137 +[gh4172]: https://github.com/encode/django-rest-framework/issues/4172 +[gh4201]: https://github.com/encode/django-rest-framework/issues/4201 +[gh4260]: https://github.com/encode/django-rest-framework/issues/4260 +[gh4278]: https://github.com/encode/django-rest-framework/issues/4278 +[gh4279]: https://github.com/encode/django-rest-framework/issues/4279 +[gh4329]: https://github.com/encode/django-rest-framework/issues/4329 +[gh4370]: https://github.com/encode/django-rest-framework/issues/4370 +[gh4371]: https://github.com/encode/django-rest-framework/issues/4371 +[gh4372]: https://github.com/encode/django-rest-framework/issues/4372 +[gh4373]: https://github.com/encode/django-rest-framework/issues/4373 +[gh4374]: https://github.com/encode/django-rest-framework/issues/4374 +[gh4375]: https://github.com/encode/django-rest-framework/issues/4375 +[gh4376]: https://github.com/encode/django-rest-framework/issues/4376 +[gh4377]: https://github.com/encode/django-rest-framework/issues/4377 +[gh4378]: https://github.com/encode/django-rest-framework/issues/4378 +[gh4379]: https://github.com/encode/django-rest-framework/issues/4379 +[gh4380]: https://github.com/encode/django-rest-framework/issues/4380 +[gh4382]: https://github.com/encode/django-rest-framework/issues/4382 +[gh4383]: https://github.com/encode/django-rest-framework/issues/4383 +[gh4386]: https://github.com/encode/django-rest-framework/issues/4386 +[gh4387]: https://github.com/encode/django-rest-framework/issues/4387 +[gh4388]: https://github.com/encode/django-rest-framework/issues/4388 +[gh4390]: https://github.com/encode/django-rest-framework/issues/4390 +[gh4391]: https://github.com/encode/django-rest-framework/issues/4391 +[gh4392]: https://github.com/encode/django-rest-framework/issues/4392 +[gh4393]: https://github.com/encode/django-rest-framework/issues/4393 +[gh4394]: https://github.com/encode/django-rest-framework/issues/4394 -[gh4416]: https://github.com/tomchristie/django-rest-framework/issues/4416 -[gh4409]: https://github.com/tomchristie/django-rest-framework/issues/4409 -[gh4415]: https://github.com/tomchristie/django-rest-framework/issues/4415 -[gh4410]: https://github.com/tomchristie/django-rest-framework/issues/4410 -[gh4408]: https://github.com/tomchristie/django-rest-framework/issues/4408 -[gh4398]: https://github.com/tomchristie/django-rest-framework/issues/4398 -[gh4407]: https://github.com/tomchristie/django-rest-framework/issues/4407 -[gh4403]: https://github.com/tomchristie/django-rest-framework/issues/4403 -[gh4404]: https://github.com/tomchristie/django-rest-framework/issues/4404 -[gh4412]: https://github.com/tomchristie/django-rest-framework/issues/4412 +[gh4416]: https://github.com/encode/django-rest-framework/issues/4416 +[gh4409]: https://github.com/encode/django-rest-framework/issues/4409 +[gh4415]: https://github.com/encode/django-rest-framework/issues/4415 +[gh4410]: https://github.com/encode/django-rest-framework/issues/4410 +[gh4408]: https://github.com/encode/django-rest-framework/issues/4408 +[gh4398]: https://github.com/encode/django-rest-framework/issues/4398 +[gh4407]: https://github.com/encode/django-rest-framework/issues/4407 +[gh4403]: https://github.com/encode/django-rest-framework/issues/4403 +[gh4404]: https://github.com/encode/django-rest-framework/issues/4404 +[gh4412]: https://github.com/encode/django-rest-framework/issues/4412 -[gh4435]: https://github.com/tomchristie/django-rest-framework/issues/4435 -[gh4425]: https://github.com/tomchristie/django-rest-framework/issues/4425 -[gh4429]: https://github.com/tomchristie/django-rest-framework/issues/4429 -[gh3508]: https://github.com/tomchristie/django-rest-framework/issues/3508 -[gh4419]: https://github.com/tomchristie/django-rest-framework/issues/4419 -[gh4423]: https://github.com/tomchristie/django-rest-framework/issues/4423 +[gh4435]: https://github.com/encode/django-rest-framework/issues/4435 +[gh4425]: https://github.com/encode/django-rest-framework/issues/4425 +[gh4429]: https://github.com/encode/django-rest-framework/issues/4429 +[gh3508]: https://github.com/encode/django-rest-framework/issues/3508 +[gh4419]: https://github.com/encode/django-rest-framework/issues/4419 +[gh4423]: https://github.com/encode/django-rest-framework/issues/4423 -[gh3951]: https://github.com/tomchristie/django-rest-framework/issues/3951 -[gh4500]: https://github.com/tomchristie/django-rest-framework/issues/4500 -[gh4489]: https://github.com/tomchristie/django-rest-framework/issues/4489 -[gh4490]: https://github.com/tomchristie/django-rest-framework/issues/4490 -[gh2617]: https://github.com/tomchristie/django-rest-framework/issues/2617 -[gh4472]: https://github.com/tomchristie/django-rest-framework/issues/4472 -[gh4473]: https://github.com/tomchristie/django-rest-framework/issues/4473 -[gh4495]: https://github.com/tomchristie/django-rest-framework/issues/4495 -[gh4493]: https://github.com/tomchristie/django-rest-framework/issues/4493 -[gh4465]: https://github.com/tomchristie/django-rest-framework/issues/4465 -[gh4462]: https://github.com/tomchristie/django-rest-framework/issues/4462 -[gh4458]: https://github.com/tomchristie/django-rest-framework/issues/4458 +[gh3951]: https://github.com/encode/django-rest-framework/issues/3951 +[gh4500]: https://github.com/encode/django-rest-framework/issues/4500 +[gh4489]: https://github.com/encode/django-rest-framework/issues/4489 +[gh4490]: https://github.com/encode/django-rest-framework/issues/4490 +[gh2617]: https://github.com/encode/django-rest-framework/issues/2617 +[gh4472]: https://github.com/encode/django-rest-framework/issues/4472 +[gh4473]: https://github.com/encode/django-rest-framework/issues/4473 +[gh4495]: https://github.com/encode/django-rest-framework/issues/4495 +[gh4493]: https://github.com/encode/django-rest-framework/issues/4493 +[gh4465]: https://github.com/encode/django-rest-framework/issues/4465 +[gh4462]: https://github.com/encode/django-rest-framework/issues/4462 +[gh4458]: https://github.com/encode/django-rest-framework/issues/4458 -[gh4612]: https://github.com/tomchristie/django-rest-framework/issues/4612 -[gh4608]: https://github.com/tomchristie/django-rest-framework/issues/4608 -[gh4601]: https://github.com/tomchristie/django-rest-framework/issues/4601 -[gh4611]: https://github.com/tomchristie/django-rest-framework/issues/4611 -[gh4605]: https://github.com/tomchristie/django-rest-framework/issues/4605 -[gh4609]: https://github.com/tomchristie/django-rest-framework/issues/4609 -[gh4606]: https://github.com/tomchristie/django-rest-framework/issues/4606 -[gh4600]: https://github.com/tomchristie/django-rest-framework/issues/4600 +[gh4612]: https://github.com/encode/django-rest-framework/issues/4612 +[gh4608]: https://github.com/encode/django-rest-framework/issues/4608 +[gh4601]: https://github.com/encode/django-rest-framework/issues/4601 +[gh4611]: https://github.com/encode/django-rest-framework/issues/4611 +[gh4605]: https://github.com/encode/django-rest-framework/issues/4605 +[gh4609]: https://github.com/encode/django-rest-framework/issues/4609 +[gh4606]: https://github.com/encode/django-rest-framework/issues/4606 +[gh4600]: https://github.com/encode/django-rest-framework/issues/4600 -[gh4631]: https://github.com/tomchristie/django-rest-framework/issues/4631 -[gh4638]: https://github.com/tomchristie/django-rest-framework/issues/4638 -[gh4532]: https://github.com/tomchristie/django-rest-framework/issues/4532 -[gh4636]: https://github.com/tomchristie/django-rest-framework/issues/4636 -[gh4622]: https://github.com/tomchristie/django-rest-framework/issues/4622 -[gh4602]: https://github.com/tomchristie/django-rest-framework/issues/4602 -[gh4640]: https://github.com/tomchristie/django-rest-framework/issues/4640 -[gh4624]: https://github.com/tomchristie/django-rest-framework/issues/4624 -[gh4569]: https://github.com/tomchristie/django-rest-framework/issues/4569 -[gh4627]: https://github.com/tomchristie/django-rest-framework/issues/4627 -[gh4620]: https://github.com/tomchristie/django-rest-framework/issues/4620 -[gh4628]: https://github.com/tomchristie/django-rest-framework/issues/4628 -[gh4639]: https://github.com/tomchristie/django-rest-framework/issues/4639 +[gh4631]: https://github.com/encode/django-rest-framework/issues/4631 +[gh4638]: https://github.com/encode/django-rest-framework/issues/4638 +[gh4532]: https://github.com/encode/django-rest-framework/issues/4532 +[gh4636]: https://github.com/encode/django-rest-framework/issues/4636 +[gh4622]: https://github.com/encode/django-rest-framework/issues/4622 +[gh4602]: https://github.com/encode/django-rest-framework/issues/4602 +[gh4640]: https://github.com/encode/django-rest-framework/issues/4640 +[gh4624]: https://github.com/encode/django-rest-framework/issues/4624 +[gh4569]: https://github.com/encode/django-rest-framework/issues/4569 +[gh4627]: https://github.com/encode/django-rest-framework/issues/4627 +[gh4620]: https://github.com/encode/django-rest-framework/issues/4620 +[gh4628]: https://github.com/encode/django-rest-framework/issues/4628 +[gh4639]: https://github.com/encode/django-rest-framework/issues/4639 -[gh4660]: https://github.com/tomchristie/django-rest-framework/issues/4660 -[gh4643]: https://github.com/tomchristie/django-rest-framework/issues/4643 -[gh4644]: https://github.com/tomchristie/django-rest-framework/issues/4644 -[gh4645]: https://github.com/tomchristie/django-rest-framework/issues/4645 -[gh4646]: https://github.com/tomchristie/django-rest-framework/issues/4646 -[gh4650]: https://github.com/tomchristie/django-rest-framework/issues/4650 +[gh4660]: https://github.com/encode/django-rest-framework/issues/4660 +[gh4643]: https://github.com/encode/django-rest-framework/issues/4643 +[gh4644]: https://github.com/encode/django-rest-framework/issues/4644 +[gh4645]: https://github.com/encode/django-rest-framework/issues/4645 +[gh4646]: https://github.com/encode/django-rest-framework/issues/4646 +[gh4650]: https://github.com/encode/django-rest-framework/issues/4650 + + + +[gh4877]: https://github.com/encode/django-rest-framework/issues/4877 +[gh4753]: https://github.com/encode/django-rest-framework/issues/4753 +[gh4764]: https://github.com/encode/django-rest-framework/issues/4764 +[gh4821]: https://github.com/encode/django-rest-framework/issues/4821 +[gh4841]: https://github.com/encode/django-rest-framework/issues/4841 +[gh4759]: https://github.com/encode/django-rest-framework/issues/4759 +[gh4869]: https://github.com/encode/django-rest-framework/issues/4869 +[gh4870]: https://github.com/encode/django-rest-framework/issues/4870 +[gh4790]: https://github.com/encode/django-rest-framework/issues/4790 +[gh4661]: https://github.com/encode/django-rest-framework/issues/4661 +[gh4668]: https://github.com/encode/django-rest-framework/issues/4668 +[gh4750]: https://github.com/encode/django-rest-framework/issues/4750 +[gh4678]: https://github.com/encode/django-rest-framework/issues/4678 +[gh4634]: https://github.com/encode/django-rest-framework/issues/4634 +[gh4669]: https://github.com/encode/django-rest-framework/issues/4669 +[gh4712]: https://github.com/encode/django-rest-framework/issues/4712 + + +[gh4947]: https://github.com/encode/django-rest-framework/issues/4947 + + +[gh4959]: https://github.com/encode/django-rest-framework/issues/4959 +[gh4961]: https://github.com/encode/django-rest-framework/issues/4961 +[gh4952]: https://github.com/encode/django-rest-framework/issues/4952 +[gh4953]: https://github.com/encode/django-rest-framework/issues/4953 +[gh4950]: https://github.com/encode/django-rest-framework/issues/4950 +[gh4951]: https://github.com/encode/django-rest-framework/issues/4951 +[gh4955]: https://github.com/encode/django-rest-framework/issues/4955 +[gh4956]: https://github.com/encode/django-rest-framework/issues/4956 +[gh4949]: https://github.com/encode/django-rest-framework/issues/4949 diff --git a/docs/topics/third-party-resources.md b/docs/topics/third-party-packages.md similarity index 84% rename from docs/topics/third-party-resources.md rename to docs/topics/third-party-packages.md index 1ccedbc01..aa406084c 100644 --- a/docs/topics/third-party-resources.md +++ b/docs/topics/third-party-packages.md @@ -1,4 +1,4 @@ -# Third Party Resources +# Third Party Packages > Software ecosystems […] establish a community that further accelerates the sharing of knowledge, content, issues, expertise and skills. > @@ -165,7 +165,7 @@ We suggest adding your package to the [REST Framework][rest-framework-grid] grid #### Adding to the Django REST framework docs -Create a [Pull Request][drf-create-pr] or [Issue][drf-create-issue] on GitHub, and we'll add a link to it from the main REST framework documentation. You can add your package under **Third party packages** of the API Guide section that best applies, like [Authentication][authentication] or [Permissions][permissions]. You can also link your package under the [Third Party Resources][third-party-resources] section. +Create a [Pull Request][drf-create-pr] or [Issue][drf-create-issue] on GitHub, and we'll add a link to it from the main REST framework documentation. You can add your package under **Third party packages** of the API Guide section that best applies, like [Authentication][authentication] or [Permissions][permissions]. You can also link your package under the [Third Party Packages][third-party-packages] section. #### Announce on the discussion group. @@ -190,6 +190,7 @@ To submit new content, [open an issue][drf-create-issue] or [create a pull reque * [djoser][djoser] - Provides a set of views to handle basic actions such as registration, login, logout, password reset and account activation. * [django-rest-auth][django-rest-auth] - Provides a set of REST API endpoints for registration, authentication (including social media authentication), password reset, retrieve and update user details, etc. * [drf-oidc-auth][drf-oidc-auth] - Implements OpenID Connect token authentication for DRF. +* [drfpasswordless][drfpasswordless] - Adds (Medium, Square Cash inspired) passwordless logins and signups via email and mobile numbers. ### Permissions @@ -261,33 +262,6 @@ To submit new content, [open an issue][drf-create-issue] or [create a pull reque * [django-rest-framework-version-transforms][django-rest-framework-version-transforms] - Enables the use of delta transformations for versioning of DRF resource representations. * [django-rest-messaging][django-rest-messaging], [django-rest-messaging-centrifugo][django-rest-messaging-centrifugo] and [django-rest-messaging-js][django-rest-messaging-js] - A real-time pluggable messaging service using DRM. -## Other Resources - -### Tutorials - -* [Beginner's Guide to the Django Rest Framework][beginners-guide-to-the-django-rest-framework] -* [Getting Started with Django Rest Framework and AngularJS][getting-started-with-django-rest-framework-and-angularjs] -* [End to end web app with Django-Rest-Framework & AngularJS][end-to-end-web-app-with-django-rest-framework-angularjs] -* [Start Your API - django-rest-framework part 1][start-your-api-django-rest-framework-part-1] -* [Permissions & Authentication - django-rest-framework part 2][permissions-authentication-django-rest-framework-part-2] -* [ViewSets and Routers - django-rest-framework part 3][viewsets-and-routers-django-rest-framework-part-3] -* [Django Rest Framework User Endpoint][django-rest-framework-user-endpoint] -* [Check credentials using Django Rest Framework][check-credentials-using-django-rest-framework] -* [Django REST Framework course][django-rest-framework-course] - -### Videos - -* [Ember and Django Part 1 (Video)][ember-and-django-part 1-video] -* [Django Rest Framework Part 1 (Video)][django-rest-framework-part-1-video] - -### Articles - -* [Web API performance: profiling Django REST framework][web-api-performance-profiling-django-rest-framework] -* [API Development with Django and Django REST Framework][api-development-with-django-and-django-rest-framework] -* [Blog posts about Django REST framework][medium-django-rest-framework] - -### Documentations -* [Classy Django REST Framework][cdrf.co] [cite]: http://www.software-ecosystems.com/Software_Ecosystems/Ecosystems.html [cookiecutter]: https://github.com/jpadilla/cookiecutter-django-rest-framework @@ -298,13 +272,13 @@ To submit new content, [open an issue][drf-create-issue] or [create a pull reque [pypi-register]: https://pypi.python.org/pypi?%3Aaction=register_form [semver]: http://semver.org/ [tox-docs]: https://tox.readthedocs.io/en/latest/ -[drf-compat]: https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/compat.py +[drf-compat]: https://github.com/encode/django-rest-framework/blob/master/rest_framework/compat.py [rest-framework-grid]: https://www.djangopackages.com/grids/g/django-rest-framework/ -[drf-create-pr]: https://github.com/tomchristie/django-rest-framework/compare -[drf-create-issue]: https://github.com/tomchristie/django-rest-framework/issues/new +[drf-create-pr]: https://github.com/encode/django-rest-framework/compare +[drf-create-issue]: https://github.com/encode/django-rest-framework/issues/new [authentication]: ../api-guide/authentication.md [permissions]: ../api-guide/permissions.md -[third-party-resources]: ../topics/third-party-resources/#existing-third-party-packages +[third-party-packages]: ../topics/third-party-packages/#existing-third-party-packages [discussion-group]: https://groups.google.com/forum/#!forum/django-rest-framework [djangorestframework-digestauth]: https://github.com/juanriaza/django-rest-framework-digestauth [django-oauth-toolkit]: https://github.com/evonove/django-oauth-toolkit @@ -337,22 +311,9 @@ To submit new content, [open an issue][drf-create-issue] or [create a pull reque [gaiarestframework]: https://github.com/AppsFuel/gaiarestframework [drf-extensions]: https://github.com/chibisov/drf-extensions [ember-django-adapter]: https://github.com/dustinfarris/ember-django-adapter -[beginners-guide-to-the-django-rest-framework]: http://code.tutsplus.com/tutorials/beginners-guide-to-the-django-rest-framework--cms-19786 -[getting-started-with-django-rest-framework-and-angularjs]: http://blog.kevinastone.com/getting-started-with-django-rest-framework-and-angularjs.html -[end-to-end-web-app-with-django-rest-framework-angularjs]: http://mourafiq.com/2013/07/01/end-to-end-web-app-with-django-angular-1.html -[start-your-api-django-rest-framework-part-1]: https://godjango.com/41-start-your-api-django-rest-framework-part-1/ -[permissions-authentication-django-rest-framework-part-2]: https://godjango.com/43-permissions-authentication-django-rest-framework-part-2/ -[viewsets-and-routers-django-rest-framework-part-3]: https://godjango.com/45-viewsets-and-routers-django-rest-framework-part-3/ -[django-rest-framework-user-endpoint]: http://richardtier.com/2014/02/25/django-rest-framework-user-endpoint/ -[check-credentials-using-django-rest-framework]: http://richardtier.com/2014/03/06/110/ -[ember-and-django-part 1-video]: http://www.neckbeardrepublic.com/screencasts/ember-and-django-part-1 -[django-rest-framework-part-1-video]: http://www.neckbeardrepublic.com/screencasts/django-rest-framework-part-1 -[web-api-performance-profiling-django-rest-framework]: http://dabapps.com/blog/api-performance-profiling-django-rest-framework/ -[api-development-with-django-and-django-rest-framework]: https://bnotions.com/api-development-with-django-and-django-rest-framework/ [django-rest-auth]: https://github.com/Tivix/django-rest-auth/ [django-versatileimagefield]: https://github.com/WGBH/django-versatileimagefield [django-versatileimagefield-drf-docs]:https://django-versatileimagefield.readthedocs.io/en/latest/drf_integration.html -[cdrf.co]:http://www.cdrf.co [drf-tracking]: https://github.com/aschn/drf-tracking [django-rest-framework-braces]: https://github.com/dealertrack/django-rest-framework-braces [dry-rest-permissions]: https://github.com/Helioscene/dry-rest-permissions @@ -366,9 +327,8 @@ To submit new content, [open an issue][drf-create-issue] or [create a pull reque [django-rest-messaging]: https://github.com/raphaelgyory/django-rest-messaging [django-rest-messaging-centrifugo]: https://github.com/raphaelgyory/django-rest-messaging-centrifugo [django-rest-messaging-js]: https://github.com/raphaelgyory/django-rest-messaging-js -[medium-django-rest-framework]: https://medium.com/django-rest-framework -[django-rest-framework-course]: https://teamtreehouse.com/library/django-rest-framework [drf_tweaks]: https://github.com/ArabellaTech/drf_tweaks [drf-oidc-auth]: https://github.com/ByteInternet/drf-oidc-auth [drf-serializer-extensions]: https://github.com/evenicoulddoit/django-rest-framework-serializer-extensions [djangorestframework-queryfields]: https://github.com/wimglenn/djangorestframework-queryfields +[drfpasswordless]: https://github.com/aaronn/django-rest-framework-passwordless diff --git a/docs/topics/tutorials-and-resources.md b/docs/topics/tutorials-and-resources.md new file mode 100644 index 000000000..48719a618 --- /dev/null +++ b/docs/topics/tutorials-and-resources.md @@ -0,0 +1,116 @@ +# Tutorials and Resources + +There are a wide range of resources available for learning and using Django REST framework. We try to keep a comprehensive list available here. + +## Books + + + +## Tutorials + +* [Beginner's Guide to the Django REST Framework][beginners-guide-to-the-django-rest-framework] +* [Django REST Framework - An Introduction][drf-an-intro] +* [Django REST Framework Tutorial][drf-tutorial] +* [Django REST Framework Course][django-rest-framework-course] +* [Building a RESTful API with Django REST Framework][building-a-restful-api-with-drf] +* [Getting Started with Django REST Framework and AngularJS][getting-started-with-django-rest-framework-and-angularjs] +* [End to End Web App with Django REST Framework & AngularJS][end-to-end-web-app-with-django-rest-framework-angularjs] +* [Start Your API - Django REST Framework Part 1][start-your-api-django-rest-framework-part-1] +* [Permissions & Authentication - Django REST Framework Part 2][permissions-authentication-django-rest-framework-part-2] +* [ViewSets and Routers - Django REST Framework Part 3][viewsets-and-routers-django-rest-framework-part-3] +* [Django REST Framework User Endpoint][django-rest-framework-user-endpoint] +* [Check Credentials Using Django REST Framework][check-credentials-using-django-rest-framework] +* [Creating a Production Ready API with Python and Django REST Framework – Part 1][creating-a-production-ready-api-with-python-and-drf-part1] +* [Creating a Production Ready API with Python and Django REST Framework – Part 2][creating-a-production-ready-api-with-python-and-drf-part2] + + +## Videos + +### Talks + +* [How to Make a Full Fledged REST API with Django OAuth Toolkit][full-fledged-rest-api-with-django-oauth-tookit] +* [Django REST API - So Easy You Can Learn It in 25 Minutes][django-rest-api-so-easy] +* [Tom Christie about Django Rest Framework at Django: Under The Hood][django-under-hood-2014] +* [Django REST Framework: Schemas, Hypermedia & Client Libraries][pycon-uk-2016] + + +### Tutorials + + +* [Django REST Framework Part 1][django-rest-framework-part-1-video] +* [Django REST Framework in Your PJ's!][drf-in-your-pjs] +* [Building a REST API Using Django & Django REST Framework][building-a-rest-api-using-django-and-drf] +* [Blog API with Django REST Framework][blog-api-with-drf] +* [Ember and Django Part 1][ember-and-django-part 1-video] +* [Django REST Framework Image Upload Tutorial (with AngularJS)][drf-image-upload-tutorial-with-angularjs] +* [Django REST Framework Tutorials][drf-tutorials] + + +## Articles + +* [Web API performance: Profiling Django REST Framework][web-api-performance-profiling-django-rest-framework] +* [API Development with Django and Django REST Framework][api-development-with-django-and-django-rest-framework] +* [Integrating Pandas, Django REST Framework and Bokeh][integrating-pandas-drf-and-bokeh] +* [Controlling Uncertainty on Web Applications and APIs][controlling-uncertainty-on-web-apps-and-apis] +* [Full Text Search in Django REST Framework with Database Backends][full-text-search-in-drf] +* [OAuth2 Authentication with Django REST Framework and Custom Third-Party OAuth2 Backends][oauth2-authentication-with-drf] +* [Nested Resources with Django REST Framework][nested-resources-with-drf] +* [Image Fields with Django REST Framework][image-fields-with-drf] +* [Chatbot Using Django REST Framework + api.ai + Slack — Part 1/3][chatbot-using-drf-part1] +* [New Django Admin with DRF and EmberJS... What are the News?][new-django-admin-with-drf-and-emberjs] +* [Blog posts about Django REST Framework][medium-django-rest-framework] + +### Documentations +* [Classy Django REST Framework][cdrf.co] +* [DRF-schema-adapter][drf-schema] + +Want your Django REST Framework talk/tutorial/article to be added to our website? Or know of a resource that's not yet included here? Please [submit a pull request][submit-pr] or [email us][anna-email]! + + +[beginners-guide-to-the-django-rest-framework]: http://code.tutsplus.com/tutorials/beginners-guide-to-the-django-rest-framework--cms-19786 +[getting-started-with-django-rest-framework-and-angularjs]: http://blog.kevinastone.com/getting-started-with-django-rest-framework-and-angularjs.html +[end-to-end-web-app-with-django-rest-framework-angularjs]: http://mourafiq.com/2013/07/01/end-to-end-web-app-with-django-angular-1.html +[start-your-api-django-rest-framework-part-1]: https://godjango.com/41-start-your-api-django-rest-framework-part-1/ +[permissions-authentication-django-rest-framework-part-2]: https://godjango.com/43-permissions-authentication-django-rest-framework-part-2/ +[viewsets-and-routers-django-rest-framework-part-3]: https://godjango.com/45-viewsets-and-routers-django-rest-framework-part-3/ +[django-rest-framework-user-endpoint]: http://richardtier.com/2014/02/25/django-rest-framework-user-endpoint/ +[check-credentials-using-django-rest-framework]: http://richardtier.com/2014/03/06/110/ +[ember-and-django-part 1-video]: http://www.neckbeardrepublic.com/screencasts/ember-and-django-part-1 +[django-rest-framework-part-1-video]: http://www.neckbeardrepublic.com/screencasts/django-rest-framework-part-1 +[web-api-performance-profiling-django-rest-framework]: http://dabapps.com/blog/api-performance-profiling-django-rest-framework/ +[api-development-with-django-and-django-rest-framework]: https://bnotions.com/api-development-with-django-and-django-rest-framework/ +[cdrf.co]:http://www.cdrf.co +[medium-django-rest-framework]: https://medium.com/django-rest-framework +[django-rest-framework-course]: https://teamtreehouse.com/library/django-rest-framework +[pycon-uk-2016]: https://www.youtube.com/watch?v=FjmiGh7OqVg +[django-under-hood-2014]: https://www.youtube.com/watch?v=3cSsbe-tA0E +[integrating-pandas-drf-and-bokeh]: http://machinalis.com/blog/pandas-django-rest-framework-bokeh/ +[controlling-uncertainty-on-web-apps-and-apis]: http://machinalis.com/blog/controlling-uncertainty-on-web-applications-and-apis/ +[full-text-search-in-drf]: http://machinalis.com/blog/full-text-search-on-django-rest-framework/ +[oauth2-authentication-with-drf]: http://machinalis.com/blog/oauth2-authentication/ +[nested-resources-with-drf]: http://machinalis.com/blog/nested-resources-with-django/ +[image-fields-with-drf]: http://machinalis.com/blog/image-fields-with-django-rest-framework/ +[chatbot-using-drf-part1]: https://chatbotslife.com/chatbot-using-django-rest-framework-api-ai-slack-part-1-3-69c7e38b7b1e#.g2aceuncf +[new-django-admin-with-drf-and-emberjs]: https://blog.levit.be/new-django-admin-with-emberjs-what-are-the-news/ +[drf-schema]: http://drf-schema-adapter.readthedocs.io/en/latest/ +[creating-a-production-ready-api-with-python-and-drf-part1]: https://www.andreagrandi.it/2016/09/28/creating-production-ready-api-python-django-rest-framework-part-1/ +[creating-a-production-ready-api-with-python-and-drf-part2]: https://www.andreagrandi.it/2016/10/01/creating-a-production-ready-api-with-python-and-django-rest-framework-part-2/ +[django-rest-api-so-easy]: https://www.youtube.com/watch?v=cqP758k1BaQ +[full-fledged-rest-api-with-django-oauth-tookit]: https://www.youtube.com/watch?v=M6Ud3qC2tTk +[drf-in-your-pjs]: https://www.youtube.com/watch?v=xMtHsWa72Ww +[building-a-rest-api-using-django-and-drf]: https://www.youtube.com/watch?v=PwssEec3IRw +[drf-tutorials]: https://www.youtube.com/watch?v=axRCBgbOJp8&list=PLJtp8Jm8EDzjgVg9vVyIUMoGyqtegj7FH +[drf-image-upload-tutorial-with-angularjs]: https://www.youtube.com/watch?v=hMiNTCIY7dw&list=PLUe5s-xycYk_X0vDjYBmKuIya2a2myF8O +[blog-api-with-drf]: https://www.youtube.com/watch?v=XMu0T6L2KRQ&list=PLEsfXFp6DpzTOcOVdZF-th7BS_GYGguAS +[drf-an-intro]: https://realpython.com/blog/python/django-rest-framework-quick-start/ +[drf-tutorial]: https://tests4geeks.com/django-rest-framework-tutorial/ +[building-a-restful-api-with-drf]: http://agiliq.com/blog/2014/12/building-a-restful-api-with-django-rest-framework/ +[submit-pr]: https://github.com/encode/django-rest-framework +[anna-email]: mailto:anna@django-rest-framework.org diff --git a/docs/tutorial/1-serialization.md b/docs/tutorial/1-serialization.md index 710dfb8e7..fa54ca6a3 100644 --- a/docs/tutorial/1-serialization.md +++ b/docs/tutorial/1-serialization.md @@ -216,26 +216,15 @@ It's important to remember that `ModelSerializer` classes don't do anything part Let's see how we can write some API views using our new Serializer class. For the moment we won't use any of REST framework's other features, we'll just write the views as regular Django views. -We'll start off by creating a subclass of HttpResponse that we can use to render any data we return into `json`. - Edit the `snippets/views.py` file, and add the following. - from django.http import HttpResponse + from django.http import HttpResponse, JsonResponse from django.views.decorators.csrf import csrf_exempt from rest_framework.renderers import JSONRenderer from rest_framework.parsers import JSONParser from snippets.models import Snippet from snippets.serializers import SnippetSerializer - class JSONResponse(HttpResponse): - """ - An HttpResponse that renders its content into JSON. - """ - def __init__(self, data, **kwargs): - content = JSONRenderer().render(data) - kwargs['content_type'] = 'application/json' - super(JSONResponse, self).__init__(content, **kwargs) - The root of our API is going to be a view that supports listing all the existing snippets, or creating a new snippet. @csrf_exempt @@ -246,15 +235,15 @@ The root of our API is going to be a view that supports listing all the existing if request.method == 'GET': snippets = Snippet.objects.all() serializer = SnippetSerializer(snippets, many=True) - return JSONResponse(serializer.data) + return JsonResponse(serializer.data, safe=False) elif request.method == 'POST': data = JSONParser().parse(request) serializer = SnippetSerializer(data=data) if serializer.is_valid(): serializer.save() - return JSONResponse(serializer.data, status=201) - return JSONResponse(serializer.errors, status=400) + return JsonResponse(serializer.data, status=201) + return JsonResponse(serializer.errors, status=400) Note that because we want to be able to POST to this view from clients that won't have a CSRF token we need to mark the view as `csrf_exempt`. This isn't something that you'd normally want to do, and REST framework views actually use more sensible behavior than this, but it'll do for our purposes right now. @@ -272,15 +261,15 @@ We'll also need a view which corresponds to an individual snippet, and can be us if request.method == 'GET': serializer = SnippetSerializer(snippet) - return JSONResponse(serializer.data) + return JsonResponse(serializer.data) elif request.method == 'PUT': data = JSONParser().parse(request) serializer = SnippetSerializer(snippet, data=data) if serializer.is_valid(): serializer.save() - return JSONResponse(serializer.data) - return JSONResponse(serializer.errors, status=400) + return JsonResponse(serializer.data) + return JsonResponse(serializer.errors, status=400) elif request.method == 'DELETE': snippet.delete() @@ -384,7 +373,7 @@ Our API views don't do anything particularly special at the moment, beyond servi We'll see how we can start to improve things in [part 2 of the tutorial][tut-2]. [quickstart]: quickstart.md -[repo]: https://github.com/tomchristie/rest-framework-tutorial +[repo]: https://github.com/encode/rest-framework-tutorial [sandbox]: http://restframework.herokuapp.com/ [virtualenv]: http://www.virtualenv.org/en/latest/index.html [tut-2]: 2-requests-and-responses.md diff --git a/docs/tutorial/4-authentication-and-permissions.md b/docs/tutorial/4-authentication-and-permissions.md index 43ccf9186..b43fabfac 100644 --- a/docs/tutorial/4-authentication-and-permissions.md +++ b/docs/tutorial/4-authentication-and-permissions.md @@ -209,7 +209,7 @@ We can make a successful request by including the username and password of one o http -a tom:password123 POST http://127.0.0.1:8000/snippets/ code="print 789" { - "id": 5, + "id": 1, "owner": "tom", "title": "foo", "code": "print 789", diff --git a/docs/tutorial/7-schemas-and-client-libraries.md b/docs/tutorial/7-schemas-and-client-libraries.md index eb1982955..e7bcfbafb 100644 --- a/docs/tutorial/7-schemas-and-client-libraries.md +++ b/docs/tutorial/7-schemas-and-client-libraries.md @@ -41,7 +41,7 @@ view in our URL configuration. schema_view = get_schema_view(title='Pastebin API') urlpatterns = [ - url('^schema/$', schema_view), +    url(r'^schema/$', schema_view), ... ] @@ -221,8 +221,8 @@ We've reached the end of our tutorial. If you want to get more involved in the [coreapi]: http://www.coreapi.org [corejson]: http://www.coreapi.org/specification/encoding/#core-json-encoding [openapi]: https://openapis.org/ -[repo]: https://github.com/tomchristie/rest-framework-tutorial +[repo]: https://github.com/encode/rest-framework-tutorial [sandbox]: http://restframework.herokuapp.com/ -[github]: https://github.com/tomchristie/django-rest-framework +[github]: https://github.com/encode/django-rest-framework [group]: https://groups.google.com/forum/?fromgroups#!forum/django-rest-framework [twitter]: https://twitter.com/_tomchristie diff --git a/docs_theme/404.html b/docs_theme/404.html index ce520a7c1..078b9f5ae 100644 --- a/docs_theme/404.html +++ b/docs_theme/404.html @@ -1,4 +1,4 @@ -{% extends "base.html" %} +{% extends "main.html" %} {% block content %} diff --git a/docs_theme/css/default.css b/docs_theme/css/default.css index 192e86860..a0a286b22 100644 --- a/docs_theme/css/default.css +++ b/docs_theme/css/default.css @@ -417,3 +417,8 @@ ul.sponsor { .toclink { color: #333; } + +.book-cover img { + margin: 0 !important; + display: inline-block !important; +} diff --git a/docs_theme/base.html b/docs_theme/main.html similarity index 86% rename from docs_theme/base.html rename to docs_theme/main.html index 6cb929d1c..b60b231c2 100644 --- a/docs_theme/base.html +++ b/docs_theme/main.html @@ -4,11 +4,11 @@ - {% if page_title %}{{ page_title }} - {% endif %}{{ site_name }} + {% if page.title %}{{ page.title }} - {% endif %}{{ config.site_name }} - + - + @@ -51,7 +51,7 @@ } - +
{% include "nav.html" %} @@ -83,14 +83,14 @@