[Python-modules-commits] [djangorestframework] 01/08: Import djangorestframework_3.3.0.orig.tar.gz

Brian May bam at moszumanska.debian.org
Fri Oct 30 08:58:32 UTC 2015


This is an automated email from the git hooks/post-receive script.

bam pushed a commit to branch master
in repository djangorestframework.

commit 2fd55ce1feacdfb1159c4e7c191191fdf3ba2a92
Author: Brian May <bam at debian.org>
Date:   Fri Oct 30 18:51:13 2015 +1100

    Import djangorestframework_3.3.0.orig.tar.gz
---
 .travis.yml                                        |  25 +-
 README.md                                          |   5 +-
 docs/api-guide/authentication.md                   |  10 +
 docs/api-guide/fields.md                           |  23 +-
 docs/api-guide/filtering.md                        |  42 ++-
 docs/api-guide/format-suffixes.md                  |  10 +
 docs/api-guide/pagination.md                       |   2 +-
 docs/api-guide/relations.md                        |  35 +-
 docs/api-guide/renderers.md                        |  17 +-
 docs/api-guide/serializers.md                      |  51 ++-
 docs/api-guide/settings.md                         |  48 +--
 docs/api-guide/testing.md                          |   4 +-
 docs/api-guide/throttling.md                       |   4 +-
 docs/api-guide/versioning.md                       |   2 +-
 docs/img/django-filter.png                         | Bin 0 -> 13678 bytes
 docs/img/filter-controls.png                       | Bin 0 -> 47904 bytes
 docs/img/horizontal.png                            | Bin 0 -> 11628 bytes
 docs/img/inline.png                                | Bin 0 -> 8295 bytes
 docs/img/ordering-filter.png                       | Bin 0 -> 18226 bytes
 docs/img/search-filter.png                         | Bin 0 -> 9137 bytes
 docs/img/vertical.png                              | Bin 0 -> 11946 bytes
 docs/index.md                                      |  19 +-
 docs/topics/3.3-announcement.md                    |  58 +++
 docs/topics/browser-enhancements.md                |  87 ++---
 docs/topics/funding.md                             | 314 ++++++++++++++++
 docs/topics/html-and-forms.md                      | 214 +++++++++++
 docs/topics/release-notes.md                       |  95 ++++-
 docs/topics/third-party-resources.md               |   6 +
 docs/tutorial/1-serialization.md                   |   2 +-
 docs/tutorial/6-viewsets-and-routers.md            |   2 +-
 docs_theme/base.html                               |   2 +-
 mkdocs.yml                                         |   2 +
 requirements.txt                                   |   4 +-
 requirements/requirements-packaging.txt            |   2 +-
 rest_framework/__init__.py                         |   2 +-
 rest_framework/authtoken/serializers.py            |   8 +-
 .../authtoken/south_migrations/0001_initial.py     |  60 ----
 .../authtoken/south_migrations/__init__.py         |   0
 rest_framework/compat.py                           |  71 ++--
 rest_framework/exceptions.py                       |   6 +-
 rest_framework/fields.py                           | 265 +++++++++-----
 rest_framework/filters.py                          | 151 ++++++--
 rest_framework/locale/ar/LC_MESSAGES/django.mo     | Bin 4888 -> 4888 bytes
 rest_framework/locale/ar/LC_MESSAGES/django.po     | 157 ++++----
 rest_framework/locale/be/LC_MESSAGES/django.mo     | Bin 655 -> 655 bytes
 rest_framework/locale/be/LC_MESSAGES/django.po     | 157 ++++----
 rest_framework/locale/ca/LC_MESSAGES/django.mo     | Bin 0 -> 9749 bytes
 rest_framework/locale/ca/LC_MESSAGES/django.po     | 400 +++++++++++++++++++++
 rest_framework/locale/ca_ES/LC_MESSAGES/django.mo  | Bin 0 -> 528 bytes
 .../locale/{pt => ca_ES}/LC_MESSAGES/django.po     | 161 +++++----
 rest_framework/locale/cs/LC_MESSAGES/django.mo     | Bin 9140 -> 9140 bytes
 rest_framework/locale/cs/LC_MESSAGES/django.po     | 157 ++++----
 rest_framework/locale/da/LC_MESSAGES/django.mo     | Bin 8905 -> 8905 bytes
 rest_framework/locale/da/LC_MESSAGES/django.po     | 157 ++++----
 rest_framework/locale/de/LC_MESSAGES/django.mo     | Bin 9544 -> 9544 bytes
 rest_framework/locale/de/LC_MESSAGES/django.po     | 157 ++++----
 rest_framework/locale/en/LC_MESSAGES/django.mo     | Bin 9406 -> 9476 bytes
 rest_framework/locale/en/LC_MESSAGES/django.po     | 157 ++++----
 rest_framework/locale/en_CA/LC_MESSAGES/django.mo  | Bin 529 -> 529 bytes
 rest_framework/locale/en_CA/LC_MESSAGES/django.po  | 157 ++++----
 rest_framework/locale/en_US/LC_MESSAGES/django.mo  | Bin 378 -> 378 bytes
 rest_framework/locale/en_US/LC_MESSAGES/django.po  | 153 +++++---
 rest_framework/locale/es/LC_MESSAGES/django.mo     | Bin 9844 -> 10127 bytes
 rest_framework/locale/es/LC_MESSAGES/django.po     | 163 +++++----
 rest_framework/locale/et/LC_MESSAGES/django.mo     | Bin 8836 -> 8836 bytes
 rest_framework/locale/et/LC_MESSAGES/django.po     | 157 ++++----
 rest_framework/locale/fr/LC_MESSAGES/django.mo     | Bin 9389 -> 10193 bytes
 rest_framework/locale/fr/LC_MESSAGES/django.po     | 169 +++++----
 rest_framework/locale/fr_CA/LC_MESSAGES/django.mo  | Bin 527 -> 527 bytes
 rest_framework/locale/fr_CA/LC_MESSAGES/django.po  | 157 ++++----
 rest_framework/locale/gl/LC_MESSAGES/django.mo     | Bin 515 -> 515 bytes
 rest_framework/locale/gl/LC_MESSAGES/django.po     | 157 ++++----
 rest_framework/locale/gl_ES/LC_MESSAGES/django.mo  | Bin 669 -> 669 bytes
 rest_framework/locale/gl_ES/LC_MESSAGES/django.po  | 157 ++++----
 rest_framework/locale/hu/LC_MESSAGES/django.mo     | Bin 9228 -> 9228 bytes
 rest_framework/locale/hu/LC_MESSAGES/django.po     | 157 ++++----
 rest_framework/locale/id/LC_MESSAGES/django.mo     | Bin 510 -> 510 bytes
 rest_framework/locale/id/LC_MESSAGES/django.po     | 157 ++++----
 rest_framework/locale/it/LC_MESSAGES/django.mo     | Bin 9512 -> 9512 bytes
 rest_framework/locale/it/LC_MESSAGES/django.po     | 157 ++++----
 rest_framework/locale/ja/LC_MESSAGES/django.mo     | Bin 0 -> 11341 bytes
 rest_framework/locale/ja/LC_MESSAGES/django.po     | 400 +++++++++++++++++++++
 rest_framework/locale/ko_KR/LC_MESSAGES/django.mo  | Bin 10148 -> 10148 bytes
 rest_framework/locale/ko_KR/LC_MESSAGES/django.po  | 157 ++++----
 rest_framework/locale/mk/LC_MESSAGES/django.mo     | Bin 10744 -> 10744 bytes
 rest_framework/locale/mk/LC_MESSAGES/django.po     | 157 ++++----
 rest_framework/locale/nb/LC_MESSAGES/django.mo     | Bin 524 -> 524 bytes
 rest_framework/locale/nb/LC_MESSAGES/django.po     | 157 ++++----
 rest_framework/locale/nl/LC_MESSAGES/django.mo     | Bin 9267 -> 9267 bytes
 rest_framework/locale/nl/LC_MESSAGES/django.po     | 157 ++++----
 rest_framework/locale/pl/LC_MESSAGES/django.mo     | Bin 9602 -> 9602 bytes
 rest_framework/locale/pl/LC_MESSAGES/django.po     | 157 ++++----
 rest_framework/locale/pt/LC_MESSAGES/django.mo     | Bin 517 -> 517 bytes
 rest_framework/locale/pt/LC_MESSAGES/django.po     | 157 ++++----
 rest_framework/locale/pt_BR/LC_MESSAGES/django.mo  | Bin 9204 -> 9974 bytes
 rest_framework/locale/pt_BR/LC_MESSAGES/django.po  | 231 +++++++-----
 rest_framework/locale/pt_PT/LC_MESSAGES/django.mo  | Bin 534 -> 534 bytes
 rest_framework/locale/pt_PT/LC_MESSAGES/django.po  | 157 ++++----
 rest_framework/locale/ru/LC_MESSAGES/django.mo     | Bin 11487 -> 11487 bytes
 rest_framework/locale/ru/LC_MESSAGES/django.po     | 157 ++++----
 rest_framework/locale/sk/LC_MESSAGES/django.mo     | Bin 9524 -> 9524 bytes
 rest_framework/locale/sk/LC_MESSAGES/django.po     | 157 ++++----
 rest_framework/locale/sv/LC_MESSAGES/django.mo     | Bin 9519 -> 9519 bytes
 rest_framework/locale/sv/LC_MESSAGES/django.po     | 157 ++++----
 rest_framework/locale/tr/LC_MESSAGES/django.mo     | Bin 9211 -> 9211 bytes
 rest_framework/locale/tr/LC_MESSAGES/django.po     | 157 ++++----
 rest_framework/locale/tr_TR/LC_MESSAGES/django.mo  | Bin 522 -> 522 bytes
 rest_framework/locale/tr_TR/LC_MESSAGES/django.po  | 157 ++++----
 rest_framework/locale/uk/LC_MESSAGES/django.mo     | Bin 590 -> 590 bytes
 rest_framework/locale/uk/LC_MESSAGES/django.po     | 157 ++++----
 rest_framework/locale/vi/LC_MESSAGES/django.mo     | Bin 510 -> 510 bytes
 rest_framework/locale/vi/LC_MESSAGES/django.po     | 157 ++++----
 rest_framework/locale/zh_CN/LC_MESSAGES/django.mo  | Bin 9261 -> 9261 bytes
 rest_framework/locale/zh_CN/LC_MESSAGES/django.po  | 157 ++++----
 rest_framework/locale/zh_TW/LC_MESSAGES/django.mo  | Bin 0 -> 522 bytes
 .../locale/{id => zh_TW}/LC_MESSAGES/django.po     | 161 +++++----
 rest_framework/metadata.py                         |   5 +-
 rest_framework/negotiation.py                      |   3 -
 rest_framework/pagination.py                       |  65 +---
 rest_framework/permissions.py                      |   6 +-
 rest_framework/relations.py                        |  24 +-
 rest_framework/renderers.py                        | 103 +++---
 rest_framework/request.py                          | 101 +-----
 rest_framework/response.py                         |   2 +-
 rest_framework/reverse.py                          |   1 -
 rest_framework/routers.py                          |   5 +-
 rest_framework/serializers.py                      |  76 +++-
 rest_framework/settings.py                         |  25 +-
 .../static/rest_framework/css/default.css          |   8 +
 .../static/rest_framework/js/ajax-form.js          |  97 +++++
 rest_framework/static/rest_framework/js/csrf.js    |  47 +++
 .../static/rest_framework/js/jquery-1.11.3.min.js  |   5 +
 .../static/rest_framework/js/jquery-1.8.1-min.js   |   2 -
 rest_framework/templates/rest_framework/admin.html |  30 +-
 .../templates/rest_framework/api_form.html         |   8 -
 rest_framework/templates/rest_framework/base.html  |  43 ++-
 .../templates/rest_framework/filters/base.html     |  16 +
 .../rest_framework/filters/django_filter.html      |   6 +
 .../filters/django_filter_crispyforms.html         |   5 +
 .../templates/rest_framework/filters/ordering.html |  14 +
 .../templates/rest_framework/filters/search.html   |  12 +
 .../templates/rest_framework/horizontal/form.html  |  20 +-
 .../rest_framework/horizontal/select.html          |   2 +-
 .../rest_framework/horizontal/select_multiple.html |   2 +-
 .../templates/rest_framework/inline/form.html      |  17 +-
 .../templates/rest_framework/inline/select.html    |   2 +-
 .../rest_framework/inline/select_multiple.html     |   2 +-
 .../templates/rest_framework/raw_data_form.html    |   1 -
 .../templates/rest_framework/vertical/form.html    |  16 +-
 .../templates/rest_framework/vertical/select.html  |   2 +-
 .../rest_framework/vertical/select_multiple.html   |   2 +-
 rest_framework/templatetags/rest_framework.py      |  21 +-
 rest_framework/utils/field_mapping.py              |  51 ++-
 rest_framework/utils/html.py                       |   2 +-
 rest_framework/utils/model_meta.py                 |  18 +-
 rest_framework/utils/serializer_helpers.py         |   5 +-
 rest_framework/validators.py                       |  18 +-
 runtests.py                                        |   6 +-
 setup.py                                           |   4 +
 tests/test_atomic_requests.py                      |  36 +-
 tests/test_bound_fields.py                         |  23 ++
 tests/test_fields.py                               | 101 +++++-
 tests/test_filters.py                              |  19 +-
 tests/test_model_serializer.py                     |  41 ++-
 tests/test_pagination.py                           |  35 --
 tests/test_permissions.py                          |   6 +-
 tests/test_relations_generic.py                    |   2 +-
 tests/test_renderers.py                            |  14 +-
 tests/test_request.py                              |  84 +----
 tests/test_response.py                             |  51 +--
 tests/test_serializer.py                           |  10 +
 tests/test_serializer_lists.py                     |  29 ++
 tests/test_serializer_nested.py                    |  50 ++-
 tests/test_utils.py                                |   6 +-
 tests/test_validators.py                           |   2 +-
 tests/test_views.py                                |  30 --
 tox.ini                                            |  49 ++-
 177 files changed, 6392 insertions(+), 3135 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 87db5e0..67404d7 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -5,6 +5,9 @@ sudo: false
 env:
     - TOX_ENV=py27-lint
     - TOX_ENV=py27-docs
+    - TOX_ENV=py35-django19
+    - TOX_ENV=py34-django19
+    - TOX_ENV=py27-django19
     - TOX_ENV=py34-django18
     - TOX_ENV=py33-django18
     - TOX_ENV=py32-django18
@@ -13,28 +16,12 @@ env:
     - TOX_ENV=py33-django17
     - TOX_ENV=py32-django17
     - TOX_ENV=py27-django17
-    - TOX_ENV=py34-django16
-    - TOX_ENV=py33-django16
-    - TOX_ENV=py32-django16
-    - TOX_ENV=py27-django16
-    - TOX_ENV=py26-django16
-    - TOX_ENV=py34-django15
-    - TOX_ENV=py33-django15
-    - TOX_ENV=py32-django15
-    - TOX_ENV=py27-django15
-    - TOX_ENV=py26-django15
-    - TOX_ENV=py27-djangomaster
-    - TOX_ENV=py32-djangomaster
-    - TOX_ENV=py33-djangomaster
-    - TOX_ENV=py34-djangomaster
 
 matrix:
+    # Python 3.5 not yet available on travis, watch this to see when it is.
   fast_finish: true
   allow_failures:
-    - env: TOX_ENV=py27-djangomaster
-    - env: TOX_ENV=py32-djangomaster
-    - env: TOX_ENV=py33-djangomaster
-    - env: TOX_ENV=py34-djangomaster
+    - env: TOX_ENV=py35-django19
 
 install:
   - pip install tox
@@ -44,4 +31,4 @@ script:
 
 after_success:
     - pip install codecov
-    - codecov
+    - codecov -e TOX_ENV
diff --git a/README.md b/README.md
index 784b54c..f9bd1f4 100644
--- a/README.md
+++ b/README.md
@@ -36,8 +36,8 @@ There is a live example API for testing purposes, [available here][sandbox].
 
 # Requirements
 
-* Python (2.6.5+, 2.7, 3.2, 3.3, 3.4)
-* Django (1.5.6+, 1.6.3+, 1.7, 1.8)
+* Python (2.7, 3.2, 3.3, 3.4, 3.5)
+* Django (1.7, 1.8, 1.9)
 
 # Installation
 
@@ -157,7 +157,6 @@ If you believe you’ve found something in Django REST framework which has secur
 
 Send a description of the issue via email to [rest-framework-security at 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
diff --git a/docs/api-guide/authentication.md b/docs/api-guide/authentication.md
index 2ccf7d7..3ade3a6 100644
--- a/docs/api-guide/authentication.md
+++ b/docs/api-guide/authentication.md
@@ -360,6 +360,14 @@ HTTP Signature (currently a [IETF draft][http-signature-ietf-draft]) provides a
 
 [Django-rest-auth][django-rest-auth] library provides a set of REST API endpoints for registration, authentication (including social media authentication), password reset, retrieve and update user details, etc. By having these API endpoints, your client apps such as AngularJS, iOS, Android, and others can communicate to your Django backend site independently via REST APIs for user management.
 
+## django-rest-framework-social-oauth2
+
+[Django-rest-framework-social-oauth2][django-rest-framework-social-oauth2] library provides an easy way to integrate social plugins (facebook, twitter, google, etc.) to your authentication system and an easy oauth2 setup. With this library, you will be able to authenticate users based on external tokens (e.g. facebook access token), convert these tokens to "in-house" oauth2 tokens and use and generate oauth2 tokens to authenticate your users.
+
+## django-rest-knox
+
+[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 us [...]
+
 [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
@@ -400,3 +408,5 @@ HTTP Signature (currently a [IETF draft][http-signature-ietf-draft]) provides a
 [mac]: http://tools.ietf.org/html/draft-hammer-oauth-v2-mac-token-05
 [djoser]: https://github.com/sunscrapers/djoser
 [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
diff --git a/docs/api-guide/fields.md b/docs/api-guide/fields.md
index 55d73fb..f090bf7 100644
--- a/docs/api-guide/fields.md
+++ b/docs/api-guide/fields.md
@@ -51,13 +51,13 @@ Defaults to `False`
 
 If set, this gives the default value that will be used for the field if no input value is supplied.  If not set the default behavior is to not populate the attribute at all.
 
-May be set to a function or other callable, in which case the value will be evaluated each time it is used.
+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).
 
 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`
 
-The name of the attribute that will be used to populate the field.  May be a method that only takes a `self` argument, such as `URLField('get_absolute_url')`, or may use dotted notation to traverse attributes, such as `EmailField(source='user.email')`.
+The name of the attribute that will be used to populate the field.  May be a method that only takes a `self` argument, such as `URLField(source='get_absolute_url')`, or may use dotted notation to traverse attributes, such as `EmailField(source='user.email')`.
 
 The value `source='*'` has a special meaning, and is used to indicate that the entire object should be passed through to the field.  This can be useful for creating nested representations, or for fields which require access to the complete object in order to determine the output representation.
 
@@ -85,9 +85,9 @@ A value that should be used for pre-populating the value of HTML form fields.
 
 ### `style`
 
-A dictionary of key-value pairs that can be used to control how renderers should render the field. The API for this should still be considered experimental, and will be formalized with the 3.1 release.
+A dictionary of key-value pairs that can be used to control how renderers should render the field.
 
-Two options are currently used in HTML form generation, `'input_type'` and `'base_template'`.
+Two examples here are `'input_type'` and `'base_template'`:
 
     # Use <input type="password"> for the input.
     password = serializers.CharField(
@@ -100,7 +100,7 @@ Two options are currently used in HTML form generation, `'input_type'` and `'bas
         style = {'base_template': 'radio.html'}
     }
 
-**Note**: The `style` argument replaces the old-style version 2.x `widget` keyword argument. Because REST framework 3 now uses templated HTML form generation, the `widget` option that was used to support Django built-in widgets can no longer be supported. Version 3.1 is planned to include public API support for customizing HTML form generation.
+For more details see the [HTML & Forms][html-and-forms] documentation.
 
 ---
 
@@ -364,6 +364,8 @@ Used by `ModelSerializer` to automatically generate fields if the corresponding
 
 - `choices` - A list of valid values, or a list of `(key, display_name)` tuples.
 - `allow_blank` - If set to `True` then the empty string should be considered a valid value. If set to `False` then the empty string is considered invalid and will raise a validation error. Defaults to `False`.
+- `html_cutoff` - If set this will be the maximum number of choices that will be displayed by a HTML select drop down. Can be used to ensure that automatically generated ChoiceFields with very large possible selections do not prevent a template from rendering. Defaults to `None`.
+- `html_cutoff_text` - If set this will display a textual indicator if the maximum number of items have been cutoff in an HTML select drop down. Defaults to `"More than {count} items…"`
 
 Both the `allow_blank` and `allow_null` are valid options on `ChoiceField`, although it is highly recommended that you only use one and not both. `allow_blank` should be preferred for textual choices, and `allow_null` should be preferred for numeric or other non-textual choices.
 
@@ -375,6 +377,8 @@ A field that can accept a set of zero, one or many values, chosen from a limited
 
 - `choices` - A list of valid values, or a list of `(key, display_name)` tuples.
 - `allow_blank` - If set to `True` then the empty string should be considered a valid value. If set to `False` then the empty string is considered invalid and will raise a validation error. Defaults to `False`.
+- `html_cutoff` - If set this will be the maximum number of choices that will be displayed by a HTML select drop down. Can be used to ensure that automatically generated ChoiceFields with very large possible selections do not prevent a template from rendering. Defaults to `None`.
+- `html_cutoff_text` - If set this will display a textual indicator if the maximum number of items have been cutoff in an HTML select drop down. Defaults to `"More than {count} items…"`
 
 As with `ChoiceField`, both the `allow_blank` and `allow_null` options are valid, although it is highly recommended that you only use one and not both. `allow_blank` should be preferred for textual choices, and `allow_null` should be preferred for numeric or other non-textual choices.
 
@@ -455,6 +459,14 @@ You can also use the declarative style, as with `ListField`. For example:
     class DocumentField(DictField):
         child = CharField()
 
+## JSONField
+
+A field class that validates that the incoming data structure consists of valid JSON primitives. In its alternate binary mode, it will represent and validate JSON-encoded binary strings.
+
+**Signature**: `JSONField(binary)`
+
+- `binary` - If set to `True` then the field will output and validate a JSON encoded string, rather that a primitive data structure. Defaults to `False`.
+
 ---
 
 # Miscellaneous fields
@@ -646,6 +658,7 @@ The [django-rest-framework-gis][django-rest-framework-gis] package provides geog
 The [django-rest-framework-hstore][django-rest-framework-hstore] package provides an `HStoreField` to support [django-hstore][django-hstore] `DictionaryField` model field.
 
 [cite]: https://docs.djangoproject.com/en/dev/ref/forms/api/#django.forms.Form.cleaned_data
+[html-and-forms]: ../topics/html-and-forms.md
 [FILE_UPLOAD_HANDLERS]: https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-FILE_UPLOAD_HANDLERS
 [ecma262]: http://ecma-international.org/ecma-262/5.1/#sec-15.9.1.15
 [strftime]: http://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior
diff --git a/docs/api-guide/filtering.md b/docs/api-guide/filtering.md
index c1311c3..de3c2d0 100644
--- a/docs/api-guide/filtering.md
+++ b/docs/api-guide/filtering.md
@@ -83,6 +83,10 @@ We can override `.get_queryset()` to deal with URLs such as `http://example.com/
 
 As well as being able to override the default queryset, REST framework also includes support for generic filtering backends that allow you to easily construct complex searches and filters.
 
+Generic filters can also present themselves as HTML controls in the browsable API and admin API.
+
+![Filter Example](../img/filter-controls.png)
+
 ## Setting filter backends
 
 The default filter backends may be set globally, using the `DEFAULT_FILTER_BACKENDS` setting.  For example.
@@ -95,9 +99,9 @@ You can also set the filter backends on a per-view, or per-viewset basis,
 using the `GenericAPIView` class based views.
 
     from django.contrib.auth.models import User
-	from myapp.serializers import UserSerializer
+    from myapp.serializers import UserSerializer
     from rest_framework import filters
-	from rest_framework import generics
+    from rest_framework import generics
 
     class UserListView(generics.ListAPIView):
         queryset = User.objects.all()
@@ -141,6 +145,13 @@ To use REST framework's `DjangoFilterBackend`, first install `django-filter`.
 
     pip install django-filter
 
+If you are using the browsable API or admin API you may also want to install `crispy-forms`, which will enhance the presentation of the filter forms in HTML views, by allowing them to render Bootstrap 3 HTML.
+
+    pip install django-crispy-forms
+
+With crispy forms installed, the browsable API will present a filtering control for `DjangoFilterBackend`, like so:
+
+![Django Filter](../../docs/img/django-filter.png)
 
 #### Specifying filter fields
 
@@ -163,6 +174,7 @@ For more advanced filtering requirements you can specify a `FilterSet` class tha
     import django_filters
     from myapp.models import Product
     from myapp.serializers import ProductSerializer
+    from rest_framework import filters
     from rest_framework import generics
 
     class ProductFilter(django_filters.FilterSet):
@@ -236,6 +248,10 @@ For more details on using filter sets see the [django-filter documentation][djan
 
 The `SearchFilter` class supports simple single query parameter based searching, and is based on the [Django admin's search functionality][search-django-admin].
 
+When in use, the browsable API will include a `SearchFilter` control:
+
+![Search Filter](../../docs/img/search-filter.png)
+
 The `SearchFilter` class will only be applied if the view has a `search_fields` attribute set.  The `search_fields` attribute should be a list of names of text type fields on the model, such as `CharField` or `TextField`.
 
     class UserListView(generics.ListAPIView):
@@ -259,6 +275,7 @@ The search behavior may be restricted by prepending various characters to the `s
 * '^' Starts-with search.
 * '=' Exact matches.
 * '@' Full-text search.  (Currently only supported Django's MySQL backend.)
+* '$' Regex search.
 
 For example:
 
@@ -272,7 +289,11 @@ For more details, see the [Django documentation][search-django-admin].
 
 ## OrderingFilter
 
-The `OrderingFilter` class supports simple query parameter controlled ordering of results.  By default, the query parameter is named `'ordering'`, but this may by overridden with the `ORDERING_PARAM` setting.
+The `OrderingFilter` class supports simple query parameter controlled ordering of results.
+
+![Ordering Filter](../../docs/img/ordering-filter.png)
+
+By default, the query parameter is named `'ordering'`, but this may by overridden with the `ORDERING_PARAM` setting.
 
 For example, to order users by username:
 
@@ -329,8 +350,6 @@ The `ordering` attribute may be either a string or a list/tuple of strings.
 
 The `DjangoObjectPermissionsFilter` is intended to be used together with the [`django-guardian`][guardian] package, with custom `'view'` permissions added.  The filter will ensure that querysets only returns objects for which the user has the appropriate view permission.
 
-This filter class must be used with views that provide either a `queryset` or a `model` attribute.
-
 If you're using `DjangoObjectPermissionsFilter`, you'll probably also want to add an appropriate object permissions class, to ensure that users can only operate on instances if they have the appropriate object permissions.  The easiest way to do this is to subclass `DjangoObjectPermissions` and add `'view'` permissions to the `perms_map` attribute.
 
 A complete example using both `DjangoObjectPermissionsFilter` and `DjangoObjectPermissions` might look something like this.
@@ -389,6 +408,14 @@ For example, you might need to restrict users to only being able to see objects
 
 We could achieve the same behavior by overriding `get_queryset()` on the views, but using a filter backend allows you to more easily add this restriction to multiple views, or to apply it across the entire API.
 
+## Customizing the interface
+
+Generic filters may also present an interface in the browsable API. To do so you should implement a `to_html()` method which returns a rendered HTML representation of the filter. This method should have the following signature:
+
+`to_html(self, request, queryset, view)`
+
+The method should return a rendered HTML string.
+
 # Third party packages
 
 The following third party packages provide additional filter implementations.
@@ -401,6 +428,10 @@ The [django-rest-framework-filters package][django-rest-framework-filters] works
 
 The [djangorestframework-word-filter][django-rest-framework-word-search-filter] developed as alternative to `filters.SearchFilter` which will search full word in text, or exact match.
 
+## Django URL Filter
+
+[django-url-filter][django-url-filter] provides a safe way to filter data via human-friendly URLs. It works very similar to DRF serializers and fields in a sense that they can be nested except they are called filtersets and filters. That provides easy way to filter related data. Also this library is generic-purpose so it can be used to filter other sources of data and not only Django `QuerySet`s.
+
 [cite]: https://docs.djangoproject.com/en/dev/topics/db/queries/#retrieving-specific-objects-with-filters
 [django-filter]: https://github.com/alex/django-filter
 [django-filter-docs]: https://django-filter.readthedocs.org/en/latest/index.html
@@ -411,3 +442,4 @@ The [djangorestframework-word-filter][django-rest-framework-word-search-filter]
 [search-django-admin]: https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.search_fields
 [django-rest-framework-filters]: https://github.com/philipn/django-rest-framework-filters
 [django-rest-framework-word-search-filter]: https://github.com/trollknurr/django-rest-framework-word-search-filter
+[django-url-filter]: https://github.com/miki725/django-url-filter
diff --git a/docs/api-guide/format-suffixes.md b/docs/api-guide/format-suffixes.md
index 35dbcd3..13717b0 100644
--- a/docs/api-guide/format-suffixes.md
+++ b/docs/api-guide/format-suffixes.md
@@ -69,6 +69,16 @@ If using the `i18n_patterns` function provided by Django, as well as `format_suf
 
 ---
 
+## Query parameter formats
+
+An alternative to the format suffixes is to include the requested format in a query parameter. REST framework provides this option by default, and it is used in the browsable API to switch between differing available representations.
+
+To select a representation using its short format, use the `format` query parameter. For example: `http://example.com/organizations/?format=csv`.
+
+The name of this query parameter can be modified using the `URL_FORMAT_OVERRIDE` setting. Set the value to `None` to disable this behavior.
+
+---
+
 ## Accept headers vs. format suffixes
 
 There seems to be a view among some of the Web community that filename extensions are not a RESTful pattern, and that `HTTP Accept` headers should always be used instead.
diff --git a/docs/api-guide/pagination.md b/docs/api-guide/pagination.md
index 15ebc62..881fbf1 100644
--- a/docs/api-guide/pagination.md
+++ b/docs/api-guide/pagination.md
@@ -15,7 +15,7 @@ The pagination API can support either:
 
 The built-in styles currently all use links included as part of the content of the response. This style is more accessible when using the browsable API.
 
-Pagination is only performed automatically if you're using the generic views or viewsets. If you're using a regular `APIView`, you'll need to call into the pagination API yourself to ensure you return a paginated response. See the source code for the `mixins.ListMixin` and `generics.GenericAPIView` classes for an example.
+Pagination is only performed automatically if you're using the generic views or viewsets. If you're using a regular `APIView`, you'll need to call into the pagination API yourself to ensure you return a paginated response. See the source code for the `mixins.ListModelMixin` and `generics.GenericAPIView` classes for an example.
 
 ## Setting the pagination style
 
diff --git a/docs/api-guide/relations.md b/docs/api-guide/relations.md
index 61685e3..36cc949 100644
--- a/docs/api-guide/relations.md
+++ b/docs/api-guide/relations.md
@@ -16,7 +16,7 @@ Relational fields are used to represent model relationships.  They can be applie
 
 ---
 
-#### Inspecting automatically generated relationships.
+#### Inspecting relationships.
 
 When using the `ModelSerializer` class, serializer fields and relationships will be automatically generated for you. Inspecting these automatically generated fields can be a useful tool for determining how to customize the relationship style.
 
@@ -255,7 +255,7 @@ For example, the following serializer:
     class TrackSerializer(serializers.ModelSerializer):
         class Meta:
             model = Track
-            fields = ('order', 'title')
+            fields = ('order', 'title', 'duration')
 
     class AlbumSerializer(serializers.ModelSerializer):
         tracks = TrackSerializer(many=True, read_only=True)
@@ -288,12 +288,12 @@ Would serialize to a nested representation like this:
 
 # Writable nested serializers
 
-Be default nested serializers are read-only. If you want to to support write-operations to a nested serializer field you'll need to create either or both of the `create()` and/or `update()` methods, in order to explicitly specify how the child relationships should be saved.
+By default nested serializers are read-only. If you want to support write-operations to a nested serializer field you'll need to create `create()` and/or `update()` methods in order to explicitly specify how the child relationships should be saved.
 
     class TrackSerializer(serializers.ModelSerializer):
         class Meta:
             model = Track
-            fields = ('order', 'title')
+            fields = ('order', 'title', 'duration')
 
     class AlbumSerializer(serializers.ModelSerializer):
         tracks = TrackSerializer(many=True)
@@ -405,13 +405,15 @@ In this case we'd need to override `HyperlinkedRelatedField` to get the behavior
         def get_url(self, obj, view_name, request, format):
             url_kwargs = {
                 'organization_slug': obj.organization.slug,
-                'customer_pk': obj.pk
            }
+                'customer_pk': obj.pk
+            }
             return reverse(view_name, url_kwargs, request=request, format=format)
 
         def get_object(self, view_name, view_args, view_kwargs):
             lookup_kwargs = {
                'organization__slug': view_kwargs['organization_slug'],
-               'pk': view_kwargs['customer_pk']
            }
+               'pk': view_kwargs['customer_pk']
+            }
             return self.get_queryset().get(**lookup_kwargs)
 
 Note that if you wanted to use this style together with the generic views then you'd also need to override `.get_object` on the view in order to get the correct lookup behavior.
@@ -442,6 +444,25 @@ To provide customized representations for such inputs, override `display_value()
         def display_value(self, instance):
             return 'Track: %s' % (instance.title)
 
+## Select field cutoffs
+
+When rendered in the browsable API relational fields will default to only displaying a maximum of 1000 selectable items. If more items are present then a disabled option with "More than 1000 items…" will be displayed.
+
+This behavior is intended to prevent a template from being unable to render in an acceptable timespan due to a very large number of relationships being displayed.
+
+There are two keyword arguments you can use to control this behavior:
+
+- `html_cutoff` - If set this will be the maximum number of choices that will be displayed by a HTML select drop down. Set to `None` to disable any limiting. Defaults to `1000`.
+- `html_cutoff_text` - If set this will display a textual indicator if the maximum number of items have been cutoff in an HTML select drop down. Defaults to `"More than {count} items…"`
+
+In cases where the cutoff is being enforced you may want to instead use a plain input field in the HTML form. You can do so using the `style` keyword argument. For example:
+
+    assigned_to = serializers.SlugRelatedField(
+       queryset=User.objects.all(),
+       slug field='username',
+       style={'base_template': 'input.html'}
+    )
+
 ## Reverse relations
 
 Note that reverse relationships are not automatically included by the `ModelSerializer` and `HyperlinkedModelSerializer` classes.  To include a reverse relationship, you must explicitly add it to the fields list.  For example:
@@ -482,7 +503,7 @@ For example, given the following model for a tag, which has a generic relationsh
         tagged_object = GenericForeignKey('content_type', 'object_id')
 
         def __unicode__(self):
-            return self.tag
+            return self.tag_name
 
 And the following two models, which may be have associated tags:
 
diff --git a/docs/api-guide/renderers.md b/docs/api-guide/renderers.md
index 6142594..fecdee8 100644
--- a/docs/api-guide/renderers.md
+++ b/docs/api-guide/renderers.md
@@ -197,9 +197,19 @@ Note that views that have nested or list serializers for their input won't work
 
 ## HTMLFormRenderer
 
-Renders data returned by a serializer into an HTML form.  The output of this renderer does not include the enclosing `<form>` tags or an submit actions, as you'll probably need those to include the desired method and URL.  Also note that the `HTMLFormRenderer` does not yet support including field error messages.
+Renders data returned by a serializer into an HTML form. The output of this renderer does not include the enclosing `<form>` tags, a hidden CSRF input or any submit buttons.
 
-**Note**: The `HTMLFormRenderer` class is intended for internal use with the browsable API and admin interface. It should not be considered a fully documented or stable API. The template used by the `HTMLFormRenderer` class, and the context submitted to it **may be subject to change**.  If you need to use this renderer class it is advised that you either make a local copy of the class and templates, or follow the release note on REST framework upgrades closely.
+This renderer is not intended to be used directly, but can instead be used in templates by passing a serializer instance to the `render_form` template tag.
+
+    {% load rest_framework %}
+
+    <form action="/submit-report/" method="post">
+        {% csrf_token %}
+        {% render_form serializer %}
+        <input type="submit" value="Save" />
+    </form>
+
+For more information see the [HTML & Forms][html-and-forms] documentation.
 
 **.media_type**: `text/html`
 
@@ -207,7 +217,7 @@ Renders data returned by a serializer into an HTML form.  The output of this ren
 
 **.charset**: `utf-8`
 
-**.template**: `'rest_framework/form.html'`
+**.template**: `'rest_framework/horizontal/form.html'`
 
 ## MultiPartRenderer
 
@@ -455,6 +465,7 @@ Comma-separated values are a plain-text tabular data format, that can be easily
 
 [cite]: https://docs.djangoproject.com/en/dev/ref/template-response/#the-rendering-process
 [conneg]: content-negotiation.md
+[html-and-forms]: ../topics/html-and-forms.md
 [browser-accept-headers]: http://www.gethifi.com/blog/browser-rest-http-accept-headers
 [testing]: testing.md
 [HATEOAS]: http://timelessrepo.com/haters-gonna-hateoas
diff --git a/docs/api-guide/serializers.md b/docs/api-guide/serializers.md
index abdb67a..0be36fd 100644
--- a/docs/api-guide/serializers.md
+++ b/docs/api-guide/serializers.md
@@ -189,6 +189,12 @@ Your `validate_<field_name>` methods should return the validated value or raise
                 raise serializers.ValidationError("Blog post is not about Django")
             return value
 
+---
+
+**Note:** If your `<field_name>` is declared on your serializer with the parameter `required=False` then this validation step will not take place if the field is not included.
+
+---
+
 #### Object-level validation
 
 To do any other validation that requires access to multiple fields, add a method called `.validate()` to your `Serializer` subclass.  This method takes a single argument, which is a dictionary of field values.  It should raise a `ValidationError` if necessary, or just return the validated values.  For example:
@@ -281,7 +287,7 @@ Similarly if a nested representation should be a list of items, you should pass
 
 ## Writable nested representations
 
-When dealing with nested representations that support deserializing the data, an errors with nested objects will be nested under the field name of the nested object.
+When dealing with nested representations that support deserializing the data, any errors with nested objects will be nested under the field name of the nested object.
 
     serializer = CommentSerializer(data={'user': {'email': 'foobar', 'username': 'doe'}, 'content': 'baz'})
     serializer.is_valid()
@@ -350,7 +356,7 @@ It is possible that a third party package, providing automatic support some kind
 
 #### Handling saving related instances in model manager classes
 
-An alternative to saving multiple related instances in the serializer is to write custom model manager classes handle creating the correct instances.
+An alternative to saving multiple related instances in the serializer is to write custom model manager classes that handle creating the correct instances.
 
 For example, suppose we wanted to ensure that `User` instances and `Profile` instances are always created together as a pair. We might write a custom manager class that looks something like this:
 
@@ -399,7 +405,7 @@ To serialize a queryset or list of objects instead of a single object instance,
 
 #### Deserializing multiple objects
 
-The default behavior for deserializing multiple objects is to support multiple object creation, but not support multiple object updates. For more information on how to support or customize either of these cases, see the [ListSerializer](#ListSerializer) documentation below.
+The default behavior for deserializing multiple objects is to support multiple object creation, but not support multiple object updates. For more information on how to support or customize either of these cases, see the [ListSerializer](#listserializer) documentation below.
 
 ## Including extra context
 
@@ -432,6 +438,7 @@ Declaring a `ModelSerializer` looks like this:
     class AccountSerializer(serializers.ModelSerializer):
         class Meta:
             model = Account
+            fields = ('id', 'account_name', 'users', 'created')
 
 By default, all the model fields on the class will be mapped to a corresponding serializer fields.
 
@@ -453,7 +460,7 @@ To do so, open the Django shell, using `python manage.py shell`, then import the
 
 ## Specifying which fields to include
 
-If you only want a subset of the default fields to be used in a model serializer, you can do so using `fields` or `exclude` options, just as you would with a `ModelForm`.
+If you only want a subset of the default fields to be used in a model serializer, you can do so using `fields` or `exclude` options, just as you would with a `ModelForm`. It is strongly recommended that you explicitly set all fields that should be serialized using the `fields` attribute. This will make it less likely to result in unintentionally exposing data when your models change.
 
 For example:
 
@@ -462,7 +469,27 @@ For example:
             model = Account
             fields = ('id', 'account_name', 'users', 'created')
 
-The names in the `fields` option will normally map to model fields on the model class.
+You can also set the `fields` attribute to the special value `'__all__'` to indicate that all fields in the model should be used.
+
+For example:
+
+    class AccountSerializer(serializers.ModelSerializer):
+        class Meta:
+            model = Account
+            fields = '__all__'
+
+You can set the `exclude` attribute to a list of fields to be excluded from the serializer.
+
+For example:
+
+    class AccountSerializer(serializers.ModelSerializer):
+        class Meta:
+            model = Account
+            exclude = ('users',)
+
+In the example above, if the `Account` model had 3 fields `account_name`, `users`, and `created`, this will result in the fields `account_name` and `created` to be serialized.
+
+The names in the `fields` and `exclude` attributes will normally map to model fields on the model class.
 
 Alternatively names in the `fields` options can map to properties or methods which take no arguments that exist on the model class.
 
@@ -524,7 +551,7 @@ Please review the [Validators Documentation](/api-guide/validators/) for details
 
 ## Additional keyword arguments
 
-There is also a shortcut allowing you to specify arbitrary additional keyword arguments on fields, using the `extra_kwargs` option. Similarly to `read_only_fields` this means you do not need to explicitly declare the field on the serializer.
+There is also a shortcut allowing you to specify arbitrary additional keyword arguments on fields, using the `extra_kwargs` option. As in the case of `read_only_fields`, this means you do not need to explicitly declare the field on the serializer.
 
 This option is a dictionary, mapping field names to a dictionary of keyword arguments. For example:
 
@@ -805,7 +832,7 @@ This class implements the same basic API as the `Serializer` class:
 * `.data` - Returns the outgoing primitive representation.
 * `.is_valid()` - Deserializes and validates incoming data.
 * `.validated_data` - Returns the validated incoming data.
-* `.errors` - Returns an errors during validation.
+* `.errors` - Returns any errors during validation.
 * `.save()` - Persists the validated data into an object instance.
 
 There are four methods that can be overridden, depending on what functionality you want the serializer class to support:
@@ -1022,6 +1049,13 @@ A new interface for controlling this behavior is currently planned for REST fram
 
 The following third party packages are also available.
 
+## Django REST marshmallow
+
+The [django-rest-marshmallow][django-rest-marshmallow] package provides an alternative implementation for serializers, using the python [marshmallow][marshmallow] library. It exposes the same API as the REST framework serializers, and can be used as a drop-in replacement in some use-cases.
+
+## Serpy
+The [serpy][serpy] package is an alternative implementation for serializers that is built for speed. [Serpy][serpy] serializes complex datatypes to simple native types. The native types can be easily converted to JSON or any other format needed.
+
 ## MongoengineModelSerializer
 
 The [django-rest-framework-mongoengine][mongoengine] package provides a `MongoEngineModelSerializer` serializer class that supports using MongoDB as the storage layer for Django REST framework.
@@ -1038,6 +1072,9 @@ The [django-rest-framework-hstore][django-rest-framework-hstore] package provide
 [relations]: relations.md
 [model-managers]: https://docs.djangoproject.com/en/dev/topics/db/managers/
 [encapsulation-blogpost]: http://www.dabapps.com/blog/django-models-and-encapsulation/
+[django-rest-marshmallow]: http://tomchristie.github.io/django-rest-marshmallow/
+[marshmallow]: https://marshmallow.readthedocs.org/en/latest/
+[serpy]: https://github.com/clarkduvall/serpy
 [mongoengine]: https://github.com/umutbozkurt/django-rest-framework-mongoengine
 [django-rest-framework-gis]: https://github.com/djangonauts/django-rest-framework-gis
 [django-rest-framework-hstore]: https://github.com/djangonauts/django-rest-framework-hstore
diff --git a/docs/api-guide/settings.md b/docs/api-guide/settings.md
index 13d23a6..23691de 100644
--- a/docs/api-guide/settings.md
+++ b/docs/api-guide/settings.md
@@ -249,47 +249,23 @@ Default:
 
 ---
 
-## Browser overrides
+## Content type controls
 
-*The following settings provide URL or form-based overrides of the default browser behavior.*
-
-#### FORM_METHOD_OVERRIDE
-
-The name of a form field that may be used to override the HTTP method of the form.
-
-If the value of this setting is `None` then form method overloading will be disabled.
-
-Default: `'_method'`
-
-#### FORM_CONTENT_OVERRIDE
-
-The name of a form field that may be used to override the content of the form payload.  Must be used together with `FORM_CONTENTTYPE_OVERRIDE`.
-
-If either setting is `None` then form content overloading will be disabled.
-
-Default: `'_content'`
-
-#### FORM_CONTENTTYPE_OVERRIDE
-
-The name of a form field that may be used to override the content type of the form payload.  Must be used together with `FORM_CONTENT_OVERRIDE`.
-
-If either setting is `None` then form content overloading will be disabled.
-
-Default: `'_content_type'`
+#### URL_FORMAT_OVERRIDE
 
-#### URL_ACCEPT_OVERRIDE
+The name of a URL parameter that may be used to override the default content negotiation `Accept` header behavior, by using a `format=…` query parameter in the request URL.
 
-The name of a URL parameter that may be used to override the HTTP `Accept` header.
+For example: `http://example.com/organizations/?format=csv`
 
-If the value of this setting is `None` then URL accept overloading will be disabled.
+If the value of this setting is `None` then URL format overrides will be disabled.
 
-Default: `'accept'`
+Default: `'format'`
 
-#### URL_FORMAT_OVERRIDE
+#### FORMAT_SUFFIX_KWARG
 
-The name of a URL parameter that may be used to override the default `Accept` header based content negotiation.
+The name of a parameter in the URL conf that may be used to provide a format suffix. This setting is applied when using `format_suffix_patterns` to include suffixed URL patterns.
 
-If the value of this setting is `None` then URL format overloading will be disabled.
+For example: `http://example.com/organizations.csv/`
 
 Default: `'format'`
 
@@ -451,12 +427,6 @@ A string representing the key that should be used for the URL fields generated b
 
 Default: `'url'`
 
-#### FORMAT_SUFFIX_KWARG
-
-The name of a parameter in the URL conf that may be used to provide a format suffix.
-
-Default: `'format'`
-
 #### NUM_PROXIES
 
 An integer of 0 or more, that may be used to specify the number of application proxies that the API runs behind.  This allows throttling to more accurately identify client IP addresses.  If set to `None` then less strict IP matching will be used by the throttle classes.
diff --git a/docs/api-guide/testing.md b/docs/api-guide/testing.md
index dd3295c..69da7d1 100644
--- a/docs/api-guide/testing.md
+++ b/docs/api-guide/testing.md
@@ -200,6 +200,7 @@ You can use any of REST framework's test case classes as you would for the regul
     from django.core.urlresolvers import reverse
     from rest_framework import status
     from rest_framework.test import APITestCase
+    from myproject.apps.core.models import Account
 
     class AccountTests(APITestCase):
         def test_create_account(self):
@@ -210,7 +211,8 @@ You can use any of REST framework's test case classes as you would for the regul
             data = {'name': 'DabApps'}
             response = self.client.post(url, data, format='json')
             self.assertEqual(response.status_code, status.HTTP_201_CREATED)
-            self.assertEqual(response.data, data)
+            self.assertEqual(Account.objects.count(), 1)
+            self.assertEqual(Account.objects.get().name, 'DabApps')
 
 ---
 
diff --git a/docs/api-guide/throttling.md b/docs/api-guide/throttling.md
index 3f66886..36753aa 100644
--- a/docs/api-guide/throttling.md
+++ b/docs/api-guide/throttling.md
@@ -148,7 +148,7 @@ For example, given the following views...
         throttle_scope = 'contacts'
         ...
 
-    class ContactDetailView(ApiView):
+    class ContactDetailView(APIView):
         throttle_scope = 'contacts'
         ...
 
@@ -184,7 +184,7 @@ If the `.wait()` method is implemented and the request is throttled, then a `Ret
 
 The following is an example of a rate throttle, that will randomly throttle 1 in every 10 requests.
 
-    class RandomRateThrottle(throttles.BaseThrottle):
+    class RandomRateThrottle(throttling.BaseThrottle):
         def allow_request(self, request, view):
             return random.randint(1, 10) == 1
 
diff --git a/docs/api-guide/versioning.md b/docs/api-guide/versioning.md
index 482943b..06b0056 100644
--- a/docs/api-guide/versioning.md
+++ b/docs/api-guide/versioning.md
@@ -72,7 +72,7 @@ The following settings keys are also used to control versioning:
 
 * `DEFAULT_VERSION`. The value that should be used for `request.version` when no versioning information is present. Defaults to `None`.
 * `ALLOWED_VERSIONS`. If set, this value will restrict the set of versions that may be returned by the versioning scheme, and will raise an error if the provided version if not in this set. Note that the value used for the `DEFAULT_VERSION` setting is always considered to be part of the `ALLOWED_VERSIONS` set. Defaults to `None`.
-* `VERSION_PARAMETER`. The string that should used for any versioning parameters, such as in the media type or URL query parameters. Defaults to `'version'`.
+* `VERSION_PARAM`. The string that should used for any versioning parameters, such as in the media type or URL query parameters. Defaults to `'version'`.
 
 You can also set your versioning class plus those three values on a per-view or a per-viewset basis by defining your own versioning scheme and using the `default_version`, `allowed_versions` and `version_param` class variables. For example, if you want to use `URLPathVersioning`:
 
diff --git a/docs/img/django-filter.png b/docs/img/django-filter.png
new file mode 100644
index 0000000..5baef32
Binary files /dev/null and b/docs/img/django-filter.png differ
diff --git a/docs/img/filter-controls.png b/docs/img/filter-controls.png
new file mode 100644
index 0000000..4a41cf0
Binary files /dev/null and b/docs/img/filter-controls.png differ
diff --git a/docs/img/horizontal.png b/docs/img/horizontal.png
new file mode 100644
index 0000000..3852070
Binary files /dev/null and b/docs/img/horizontal.png differ
diff --git a/docs/img/inline.png b/docs/img/inline.png
new file mode 100644
index 0000000..a910de1
Binary files /dev/null and b/docs/img/inline.png differ
diff --git a/docs/img/ordering-filter.png b/docs/img/ordering-filter.png
new file mode 100644
index 0000000..25bc4ec
Binary files /dev/null and b/docs/img/ordering-filter.png differ
diff --git a/docs/img/search-filter.png b/docs/img/search-filter.png
new file mode 100644
index 0000000..d36f2b9
Binary files /dev/null and b/docs/img/search-filter.png differ
diff --git a/docs/img/vertical.png b/docs/img/vertical.png
new file mode 100644
index 0000000..a85e5c6
Binary files /dev/null and b/docs/img/vertical.png differ
diff --git a/docs/index.md b/docs/index.md
index 37f1920..edfae2a 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -12,9 +12,7 @@
 
 ---
 
-**Note**: This is the documentation for the **version 3.2** of REST framework. Documentation for [version 2.4](http://tomchristie.github.io/rest-framework-2-docs/) is also available.
-
-For more details see the 3.2 [announcement][3.2-announcement] and [release notes][release-notes].
+**Note**: This is the documentation for the **version 3** of REST framework. Documentation for [version 2](http://tomchristie.github.io/rest-framework-2-docs/) is also available.
 
 ---
 
@@ -31,7 +29,7 @@ For more details see the 3.2 [announcement][3.2-announcement] and [release notes
 <img alt="Django REST Framework" title="Logo by Jake 'Sid' Smith" src="img/logo.png" width="600px" style="display: block; margin: 0 auto 0 auto">
 </p>
 
-Django REST framework is a powerful and flexible toolkit that makes it easy to build Web APIs.
+Django REST framework is a powerful and flexible toolkit for building Web APIs.
 
 Some reasons you might want to use REST framework:
 
@@ -52,13 +50,14 @@ Some reasons you might want to use REST framework:
 
 REST framework requires the following:
 
-* Python (2.6.5+, 2.7, 3.2, 3.3, 3.4)
-* Django (1.5.6+, 1.6.3+, 1.7+, 1.8)
+* Python (2.7, 3.2, 3.3, 3.4, 3.5)
+* Django (1.7+, 1.8, 1.9)
 
 The following packages are optional:
 
 * [Markdown][markdown] (2.1.0+) - Markdown support for the browsable API.
 * [django-filter][django-filter] (0.9.2+) - Filtering support.
+* [django-crispy-forms][django-crispy-forms] - Improved HTML display for filtering.
 * [django-guardian][django-guardian] (1.1.1+) - Object level permissions support.
 
 ## Installation
@@ -191,7 +190,9 @@ The API guide is your complete reference manual to all the functionality provide
 General guides to using REST framework.
 
 * [Documenting your API][documenting-your-api]
+* [Internationalization][internationalization]
 * [AJAX, CSRF & CORS][ajax-csrf-cors]
+* [HTML & Forms][html-and-forms]
 * [Browser enhancements][browser-enhancements]
 * [The Browsable API][browsableapi]
 * [REST, Hypermedia & HATEOAS][rest-hypermedia-hateoas]
@@ -201,6 +202,7 @@ General guides to using REST framework.
 * [3.0 Announcement][3.0-announcement]
... 20363 lines suppressed ...

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/python-modules/packages/djangorestframework.git



More information about the Python-modules-commits mailing list