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

Brian May bam at moszumanska.debian.org
Thu Apr 7 02:46:48 UTC 2016


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

bam pushed a commit to branch master
in repository djangorestframework.

commit def521859a25262c982825f26af67f2e29cf5cbc
Author: Brian May <bam at debian.org>
Date:   Thu Apr 7 12:31:31 2016 +1000

    Import djangorestframework_3.3.3.orig.tar.gz
---
 .travis.yml                                        |   9 +-
 .tx/config                                         |   1 +
 LICENSE.md                                         |   2 +-
 README.md                                          |   4 +-
 docs/api-guide/authentication.md                   |  15 ++
 docs/api-guide/fields.md                           |   6 +-
 docs/api-guide/filtering.md                        |   9 +-
 docs/api-guide/generic-views.md                    |   3 -
 docs/api-guide/pagination.md                       |   6 +-
 docs/api-guide/permissions.md                      |   2 +
 docs/api-guide/relations.md                        |  11 +-
 docs/api-guide/serializers.md                      |  12 +-
 docs/api-guide/settings.md                         |  51 ++--
 docs/api-guide/status-codes.md                     |   1 +
 docs/api-guide/versioning.md                       |   6 +-
 docs/img/drfdocs.png                               | Bin 0 -> 580358 bytes
 docs/img/rest-framework-docs.png                   | Bin 76612 -> 0 bytes
 docs/index.md                                      |   2 +-
 docs/topics/browsable-api.md                       |   2 +-
 docs/topics/documenting-your-api.md                |  27 ++-
 docs/topics/html-and-forms.md                      |   3 +-
 docs/topics/release-notes.md                       |  69 ++++++
 docs/topics/third-party-resources.md               |   4 +
 docs/tutorial/1-serialization.md                   |  40 ++--
 docs/tutorial/4-authentication-and-permissions.md  |   2 +-
 .../5-relationships-and-hyperlinked-apis.md        |   2 +-
 docs/tutorial/quickstart.md                        |   6 +-
 requirements/requirements-optionals.txt            |   4 +-
 requirements/requirements-packaging.txt            |   3 +
 requirements/requirements-testing.txt              |   4 +-
 rest_framework/__init__.py                         |   4 +-
 rest_framework/authentication.py                   |  15 +-
 rest_framework/authtoken/__init__.py               |   1 +
 rest_framework/authtoken/apps.py                   |   7 +
 .../migrations/0002_auto_20160226_1747.py          |  34 +++
 rest_framework/authtoken/models.py                 |  10 +-
 rest_framework/authtoken/serializers.py            |   4 +-
 rest_framework/compat.py                           |  21 +-
 rest_framework/fields.py                           |  24 +-
 rest_framework/filters.py                          |   2 +-
 rest_framework/locale/ach/LC_MESSAGES/django.mo    | Bin 513 -> 513 bytes
 rest_framework/locale/ach/LC_MESSAGES/django.po    | 115 +++++----
 rest_framework/locale/ar/LC_MESSAGES/django.mo     | Bin 4888 -> 4766 bytes
 rest_framework/locale/ar/LC_MESSAGES/django.po     | 117 +++++----
 rest_framework/locale/be/LC_MESSAGES/django.mo     | Bin 655 -> 655 bytes
 rest_framework/locale/be/LC_MESSAGES/django.po     | 115 +++++----
 rest_framework/locale/ca/LC_MESSAGES/django.mo     | Bin 9749 -> 9646 bytes
 rest_framework/locale/ca/LC_MESSAGES/django.po     | 117 +++++----
 rest_framework/locale/ca_ES/LC_MESSAGES/django.mo  | Bin 528 -> 528 bytes
 rest_framework/locale/ca_ES/LC_MESSAGES/django.po  | 115 +++++----
 rest_framework/locale/cs/LC_MESSAGES/django.mo     | Bin 9140 -> 9031 bytes
 rest_framework/locale/cs/LC_MESSAGES/django.po     | 117 +++++----
 rest_framework/locale/da/LC_MESSAGES/django.mo     | Bin 9682 -> 9881 bytes
 rest_framework/locale/da/LC_MESSAGES/django.po     | 131 ++++++----
 rest_framework/locale/da_DK/LC_MESSAGES/django.mo  | Bin 529 -> 529 bytes
 rest_framework/locale/da_DK/LC_MESSAGES/django.po  | 115 +++++----
 rest_framework/locale/de/LC_MESSAGES/django.mo     | Bin 10465 -> 10364 bytes
 rest_framework/locale/de/LC_MESSAGES/django.po     | 119 +++++----
 rest_framework/locale/el/LC_MESSAGES/django.mo     | Bin 0 -> 512 bytes
 .../locale/{en_AU => el}/LC_MESSAGES/django.po     | 119 +++++----
 .../locale/{fr_CA => el_GR}/LC_MESSAGES/django.mo  | Bin 527 -> 527 bytes
 .../locale/{en_AU => el_GR}/LC_MESSAGES/django.po  | 119 +++++----
 rest_framework/locale/en/LC_MESSAGES/django.mo     | Bin 9770 -> 10002 bytes
 rest_framework/locale/en/LC_MESSAGES/django.po     | 117 +++++----
 rest_framework/locale/en_AU/LC_MESSAGES/django.mo  | Bin 532 -> 532 bytes
 rest_framework/locale/en_AU/LC_MESSAGES/django.po  | 115 +++++----
 rest_framework/locale/en_CA/LC_MESSAGES/django.mo  | Bin 529 -> 529 bytes
 rest_framework/locale/en_CA/LC_MESSAGES/django.po  | 115 +++++----
 rest_framework/locale/en_US/LC_MESSAGES/django.mo  | Bin 378 -> 378 bytes
 rest_framework/locale/en_US/LC_MESSAGES/django.po  | 113 +++++----
 rest_framework/locale/es/LC_MESSAGES/django.mo     | Bin 10509 -> 10782 bytes
 rest_framework/locale/es/LC_MESSAGES/django.po     | 119 +++++----
 rest_framework/locale/et/LC_MESSAGES/django.mo     | Bin 8836 -> 8732 bytes
 rest_framework/locale/et/LC_MESSAGES/django.po     | 117 +++++----
 rest_framework/locale/fa/LC_MESSAGES/django.mo     | Bin 0 -> 507 bytes
 .../locale/{id => fa}/LC_MESSAGES/django.po        | 119 +++++----
 rest_framework/locale/fa_IR/LC_MESSAGES/django.mo  | Bin 0 -> 520 bytes
 .../locale/{id => fa_IR}/LC_MESSAGES/django.po     | 119 +++++----
 rest_framework/locale/fi/LC_MESSAGES/django.mo     | Bin 10068 -> 9993 bytes
 rest_framework/locale/fi/LC_MESSAGES/django.po     | 119 +++++----
 rest_framework/locale/fr/LC_MESSAGES/django.mo     | Bin 10501 -> 10770 bytes
 rest_framework/locale/fr/LC_MESSAGES/django.po     | 119 +++++----
 rest_framework/locale/fr_CA/LC_MESSAGES/django.mo  | Bin 527 -> 527 bytes
 rest_framework/locale/fr_CA/LC_MESSAGES/django.po  | 115 +++++----
 rest_framework/locale/gl/LC_MESSAGES/django.mo     | Bin 515 -> 515 bytes
 rest_framework/locale/gl/LC_MESSAGES/django.po     | 115 +++++----
 rest_framework/locale/gl_ES/LC_MESSAGES/django.mo  | Bin 669 -> 669 bytes
 rest_framework/locale/gl_ES/LC_MESSAGES/django.po  | 115 +++++----
 rest_framework/locale/he_IL/LC_MESSAGES/django.mo  | Bin 528 -> 528 bytes
 rest_framework/locale/he_IL/LC_MESSAGES/django.po  | 115 +++++----
 rest_framework/locale/hu/LC_MESSAGES/django.mo     | Bin 9228 -> 9123 bytes
 rest_framework/locale/hu/LC_MESSAGES/django.po     | 117 +++++----
 rest_framework/locale/id/LC_MESSAGES/django.mo     | Bin 510 -> 510 bytes
 rest_framework/locale/id/LC_MESSAGES/django.po     | 115 +++++----
 rest_framework/locale/it/LC_MESSAGES/django.mo     | Bin 9512 -> 10359 bytes
 rest_framework/locale/it/LC_MESSAGES/django.po     | 141 ++++++-----
 rest_framework/locale/ja/LC_MESSAGES/django.mo     | Bin 11341 -> 11941 bytes
 rest_framework/locale/ja/LC_MESSAGES/django.po     | 132 ++++++----
 rest_framework/locale/ko_KR/LC_MESSAGES/django.mo  | Bin 10148 -> 10022 bytes
 rest_framework/locale/ko_KR/LC_MESSAGES/django.po  | 117 +++++----
 rest_framework/locale/mk/LC_MESSAGES/django.mo     | Bin 10744 -> 10623 bytes
 rest_framework/locale/mk/LC_MESSAGES/django.po     | 117 +++++----
 rest_framework/locale/nb/LC_MESSAGES/django.mo     | Bin 9902 -> 9803 bytes
 rest_framework/locale/nb/LC_MESSAGES/django.po     | 119 +++++----
 rest_framework/locale/nl/LC_MESSAGES/django.mo     | Bin 9267 -> 9165 bytes
 rest_framework/locale/nl/LC_MESSAGES/django.po     | 117 +++++----
 rest_framework/locale/nn/LC_MESSAGES/django.mo     | Bin 524 -> 524 bytes
 rest_framework/locale/nn/LC_MESSAGES/django.po     | 115 +++++----
 rest_framework/locale/no/LC_MESSAGES/django.mo     | Bin 516 -> 516 bytes
 rest_framework/locale/no/LC_MESSAGES/django.po     | 115 +++++----
 rest_framework/locale/pl/LC_MESSAGES/django.mo     | Bin 10528 -> 10799 bytes
 rest_framework/locale/pl/LC_MESSAGES/django.po     | 121 ++++++----
 rest_framework/locale/pt/LC_MESSAGES/django.mo     | Bin 517 -> 517 bytes
 rest_framework/locale/pt/LC_MESSAGES/django.po     | 115 +++++----
 rest_framework/locale/pt_BR/LC_MESSAGES/django.mo  | Bin 10343 -> 10238 bytes
 rest_framework/locale/pt_BR/LC_MESSAGES/django.po  | 119 +++++----
 rest_framework/locale/pt_PT/LC_MESSAGES/django.mo  | Bin 534 -> 534 bytes
 rest_framework/locale/pt_PT/LC_MESSAGES/django.po  | 115 +++++----
 rest_framework/locale/ro/LC_MESSAGES/django.mo     | Bin 556 -> 556 bytes
 rest_framework/locale/ro/LC_MESSAGES/django.po     | 115 +++++----
 rest_framework/locale/ru/LC_MESSAGES/django.mo     | Bin 11487 -> 11360 bytes
 rest_framework/locale/ru/LC_MESSAGES/django.po     | 117 +++++----
 rest_framework/locale/sk/LC_MESSAGES/django.mo     | Bin 9524 -> 9411 bytes
 rest_framework/locale/sk/LC_MESSAGES/django.po     | 117 +++++----
 rest_framework/locale/sv/LC_MESSAGES/django.mo     | Bin 10151 -> 10073 bytes
 rest_framework/locale/sv/LC_MESSAGES/django.po     | 119 +++++----
 rest_framework/locale/tr/LC_MESSAGES/django.mo     | Bin 10269 -> 10548 bytes
 rest_framework/locale/tr/LC_MESSAGES/django.po     | 122 ++++++----
 rest_framework/locale/tr_TR/LC_MESSAGES/django.mo  | Bin 1933 -> 10520 bytes
 rest_framework/locale/tr_TR/LC_MESSAGES/django.po  | 265 ++++++++++++---------
 rest_framework/locale/uk/LC_MESSAGES/django.mo     | Bin 590 -> 590 bytes
 rest_framework/locale/uk/LC_MESSAGES/django.po     | 115 +++++----
 rest_framework/locale/vi/LC_MESSAGES/django.mo     | Bin 510 -> 510 bytes
 rest_framework/locale/vi/LC_MESSAGES/django.po     | 115 +++++----
 .../locale/zh-Hans/LC_MESSAGES/django.mo           | Bin 9894 -> 9796 bytes
 .../locale/zh-Hans/LC_MESSAGES/django.po           | 119 +++++----
 .../locale/zh-Hant/LC_MESSAGES/django.mo           | Bin 529 -> 529 bytes
 .../locale/zh-Hant/LC_MESSAGES/django.po           | 115 +++++----
 rest_framework/locale/zh_CN/LC_MESSAGES/django.mo  | Bin 9895 -> 10007 bytes
 rest_framework/locale/zh_CN/LC_MESSAGES/django.po  | 121 ++++++----
 rest_framework/locale/zh_TW/LC_MESSAGES/django.mo  | Bin 522 -> 522 bytes
 rest_framework/locale/zh_TW/LC_MESSAGES/django.po  | 115 +++++----
 rest_framework/pagination.py                       |   2 +-
 rest_framework/parsers.py                          |   2 +-
 rest_framework/relations.py                        |  21 +-
 rest_framework/renderers.py                        |   1 +
 rest_framework/serializers.py                      |   4 +-
 rest_framework/settings.py                         |  19 +-
 rest_framework/status.py                           |   1 +
 rest_framework/templates/rest_framework/admin.html |   3 +-
 rest_framework/templates/rest_framework/base.html  |   4 +-
 .../templates/rest_framework/login_base.html       |   2 +-
 .../rest_framework/vertical/checkbox.html          |   2 +-
 rest_framework/utils/field_mapping.py              |   4 +-
 rest_framework/versioning.py                       |   2 +-
 runtests.py                                        |   4 +-
 setup.py                                           |  16 ++
 tests/models.py                                    |   8 +-
 tests/test_authentication.py                       |  49 +++-
 tests/test_fields.py                               |  12 +-
 tests/test_model_serializer.py                     |  63 ++++-
 tests/test_pagination.py                           |   4 +-
 tests/test_relations.py                            |  22 ++
 tests/test_renderers.py                            |  26 ++
 tests/test_settings.py                             |  15 ++
 tests/test_validation.py                           |  18 ++
 tox.ini                                            |  29 +--
 167 files changed, 4431 insertions(+), 2491 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 67404d7..9aca4f3 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,5 +1,8 @@
 language: python
 
+python:
+  - "3.5"
+
 sudo: false
 
 env:
@@ -18,13 +21,11 @@ env:
     - TOX_ENV=py27-django17
 
 matrix:
-    # Python 3.5 not yet available on travis, watch this to see when it is.
   fast_finish: true
-  allow_failures:
-    - env: TOX_ENV=py35-django19
 
 install:
-  - pip install tox
+  # Virtualenv < 14 is required to keep the Python 3.2 builds running.
+  - pip install tox "virtualenv<14"
 
 script:
     - tox -e $TOX_ENV
diff --git a/.tx/config b/.tx/config
index 271fa1e..dea9db7 100644
--- a/.tx/config
+++ b/.tx/config
@@ -1,5 +1,6 @@
 [main]
 host = https://www.transifex.com
+lang_map = sr at latin:sr_Latn, zh-Hans:zh_Hans, zh-Hant:zh_Hant
 
 [django-rest-framework.djangopo]
 file_filter = rest_framework/locale/<lang>/LC_MESSAGES/django.po
diff --git a/LICENSE.md b/LICENSE.md
index 2b97cc5..aca195e 100644
--- a/LICENSE.md
+++ b/LICENSE.md
@@ -1,6 +1,6 @@
 # License
 
-Copyright (c) 2011-2015, Tom Christie
+Copyright (c) 2011-2016, Tom Christie
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
diff --git a/README.md b/README.md
index b5b3321..862fb0e 100644
--- a/README.md
+++ b/README.md
@@ -61,7 +61,9 @@ Startup up a new project like so...
     pip install django
     pip install djangorestframework
     django-admin.py startproject example .
-    ./manage.py syncdb
+    ./manage.py migrate
+    ./manage.py createsuperuser
+
 
 Now edit the `example/urls.py` module in your project:
 
diff --git a/docs/api-guide/authentication.md b/docs/api-guide/authentication.md
index 3ade3a6..3d1cfd1 100644
--- a/docs/api-guide/authentication.md
+++ b/docs/api-guide/authentication.md
@@ -165,6 +165,8 @@ The `curl` command line tool may be useful for testing token authenticated APIs.
 
 #### Generating Tokens
 
+##### By using signals
+
 If you want every user to have an automatically generated Token, you can simply catch the User's `post_save` signal.
 
     from django.conf import settings
@@ -187,6 +189,8 @@ If you've already created some users, you can generate tokens for all existing u
     for user in User.objects.all():
         Token.objects.get_or_create(user=user)
 
+##### By exposing an api endpoint
+
 When using `TokenAuthentication`, you may want to provide a mechanism for clients to obtain a token given the username and password.  REST framework provides a built-in view to provide this behavior.  To use it, add the `obtain_auth_token` view to your URLconf:
 
     from rest_framework.authtoken import views
@@ -202,6 +206,17 @@ The `obtain_auth_token` view will return a JSON response when valid `username` a
 
 Note that the default `obtain_auth_token` view explicitly uses JSON requests and responses, rather than using default renderer and parser classes in your settings.  If you need a customized version of the `obtain_auth_token` view, you can do so by overriding the `ObtainAuthToken` view class, and using that in your url conf instead.
 
+##### With Django admin
+
+It is also possible to create Tokens manually through admin interface. In case you are using a large user base, we recommend that you monkey patch the `TokenAdmin` class to customize it to your needs, more specifically by declaring the `user` field as `raw_field`.
+
+`your_app/admin.py`:
+
+    from rest_framework.authtoken.admin import TokenAdmin
+
+    TokenAdmin.raw_id_fields = ('user',)
+
+
 #### Schema migrations
 
 The `rest_framework.authtoken` app includes both Django native migrations (for Django versions >1.7) and South migrations (for Django versions <1.7) that will create the authtoken table.
diff --git a/docs/api-guide/fields.md b/docs/api-guide/fields.md
index 4118f6d..5acaf12 100644
--- a/docs/api-guide/fields.md
+++ b/docs/api-guide/fields.md
@@ -96,9 +96,9 @@ Two examples here are `'input_type'` and `'base_template'`:
 
     # Use a radio input instead of a select input.
     color_channel = serializers.ChoiceField(
-        choices=['red', 'green', 'blue']
-        style = {'base_template': 'radio.html'}
-    }
+        choices=['red', 'green', 'blue'],
+        style={'base_template': 'radio.html'}
+    )
 
 For more details see the [HTML & Forms][html-and-forms] documentation.
 
diff --git a/docs/api-guide/filtering.md b/docs/api-guide/filtering.md
index 9e5f605..c323007 100644
--- a/docs/api-guide/filtering.md
+++ b/docs/api-guide/filtering.md
@@ -177,7 +177,7 @@ For more advanced filtering requirements you can specify a `FilterSet` class tha
     from rest_framework import filters
     from rest_framework import generics
 
-    class ProductFilter(django_filters.FilterSet):
+    class ProductFilter(filters.FilterSet):
         min_price = django_filters.NumberFilter(name="price", lookup_type='gte')
         max_price = django_filters.NumberFilter(name="price", lookup_type='lte')
         class Meta:
@@ -199,12 +199,12 @@ You can also span relationships using `django-filter`, let's assume that each
 product has foreign key to `Manufacturer` model, so we create filter that
 filters using `Manufacturer` name. For example:
 
-    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):
+    class ProductFilter(filters.FilterSet):
         class Meta:
             model = Product
             fields = ['category', 'in_stock', 'manufacturer__name']
@@ -218,9 +218,10 @@ This is nice, but it exposes the Django's double underscore convention as part o
     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):
+    class ProductFilter(filters.FilterSet):
         manufacturer = django_filters.CharFilter(name="manufacturer__name")
 
         class Meta:
diff --git a/docs/api-guide/generic-views.md b/docs/api-guide/generic-views.md
index 4a95812..e6e3005 100644
--- a/docs/api-guide/generic-views.md
+++ b/docs/api-guide/generic-views.md
@@ -26,7 +26,6 @@ Typically when using the generic views, you'll override the view, and set severa
         queryset = User.objects.all()
         serializer_class = UserSerializer
         permission_classes = (IsAdminUser,)
-        paginate_by = 100
 
 For more complex cases you might also want to override various methods on the view class.  For example.
 
@@ -72,8 +71,6 @@ The following attributes are used to control pagination when used with list view
 
 * `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'`.
 
-Note that usage of the `paginate_by`, `paginate_by_param` and `page_kwarg` attributes are now pending deprecation. The `pagination_serializer_class` attribute and `DEFAULT_PAGINATION_SERIALIZER_CLASS` setting have been removed completely. Pagination settings should instead be controlled by overriding a pagination class and setting any configuration attributes there. See the pagination documentation for more details.
-
 **Filtering**:
 
 * `filter_backends` - A list of filter backend classes that should be used for filtering the queryset.  Defaults to the same value as the `DEFAULT_FILTER_BACKENDS` setting.
diff --git a/docs/api-guide/pagination.md b/docs/api-guide/pagination.md
index da096bd..f704a32 100644
--- a/docs/api-guide/pagination.md
+++ b/docs/api-guide/pagination.md
@@ -97,7 +97,7 @@ The `PageNumberPagination` class includes a number of attributes that may be ove
 
 To set these attributes you should override the `PageNumberPagination` class, and then enable your custom pagination class as above.
 
-* `django_paginator_class` - The Django Paginator class to use. Default is `django.core.paginator.Paginator`, which should be fine for most usecases.
+* `django_paginator_class` - The Django Paginator class to use. Default is `django.core.paginator.Paginator`, which should be fine for most use cases.
 * `page_size` - A numeric value indicating the page size. If set, this overrides the `PAGE_SIZE` setting. Defaults to the same value as the `PAGE_SIZE` settings key.
 * `page_query_param` - A string value indicating the name of the query parameter to use for the pagination control.
 * `page_size_query_param` - If set, this is a string value indicating the name of a query parameter that allows the client to set the page size on a per-request basis. Defaults to `None`, indicating that the client may not control the requested page size.
@@ -178,7 +178,7 @@ Proper usage of cursor pagination should have an ordering field that satisfies t
 * Should be a non-nullable value that can be coerced to a string.
 * The field should have a database index.
 
-Using an ordering field that does not satisfy these constraints will generally still work, but you'll be loosing some of the benefits of cursor pagination.
+Using an ordering field that does not satisfy these constraints will generally still work, but you'll be losing some of the benefits of cursor pagination.
 
 For more technical details on the implementation we use for cursor pagination, the ["Building cursors for the Disqus API"][disqus-cursor-api] blog post gives a good overview of the basic approach.
 
@@ -317,4 +317,4 @@ The [`DRF-extensions` package][drf-extensions] includes a [`PaginateByMaxMixin`
 [link-header]: ../img/link-header-pagination.png
 [drf-extensions]: http://chibisov.github.io/drf-extensions/docs/
 [paginate-by-max-mixin]: http://chibisov.github.io/drf-extensions/docs/#paginatebymaxmixin
-[disqus-cursor-api]: http://cramer.io/2011/03/08/building-cursors-for-the-disqus-api/
+[disqus-cursor-api]: http://cramer.io/2011/03/08/building-cursors-for-the-disqus-api
diff --git a/docs/api-guide/permissions.md b/docs/api-guide/permissions.md
index 0f5947d..bbac824 100644
--- a/docs/api-guide/permissions.md
+++ b/docs/api-guide/permissions.md
@@ -100,6 +100,8 @@ Or, if you're using the `@api_view` decorator with function based views.
         }
         return Response(content)
 
+__Note:__ when you set new permission classes through class attribute or decorators you're telling the view to ignore the default list set over the __settings.py__ file.
+
 ---
 
 # API Reference
diff --git a/docs/api-guide/relations.md b/docs/api-guide/relations.md
index 51e5f78..31a78f2 100644
--- a/docs/api-guide/relations.md
+++ b/docs/api-guide/relations.md
@@ -330,6 +330,8 @@ To implement a custom relational field, you should override `RelatedField`, and
 
 If you want to implement a read-write relational field, you must also implement the `.to_internal_value(self, data)` method.
 
+To provide a dynamic queryset based on the `context`, you can also override `.get_queryset(self)` instead of specifying `.queryset` on the class or when initializing the field.
+
 ## Example
 
 For example, we could define a relational field to serialize a track to a custom string representation, using its ordering, title, and duration.
@@ -459,7 +461,7 @@ In cases where the cutoff is being enforced you may want to instead use a plain
 
     assigned_to = serializers.SlugRelatedField(
        queryset=User.objects.all(),
-       slug field='username',
+       slug_field='username',
        style={'base_template': 'input.html'}
     )
 
@@ -505,7 +507,7 @@ For example, given the following model for a tag, which has a generic relationsh
         def __unicode__(self):
             return self.tag_name
 
-And the following two models, which may be have associated tags:
+And the following two models, which may have associated tags:
 
     class Bookmark(models.Model):
         """
@@ -578,9 +580,14 @@ The following third party packages are also available.
 
 The [drf-nested-routers package][drf-nested-routers] provides routers and relationship fields for working with nested resources.
 
+## Rest Framework Generic Relations
+
+The [rest-framework-generic-relations][drf-nested-relations] library provides read/write serialization for generic foreign keys.
+
 [cite]: http://lwn.net/Articles/193245/
 [reverse-relationships]: https://docs.djangoproject.com/en/dev/topics/db/queries/#following-relationships-backward
 [routers]: http://www.django-rest-framework.org/api-guide/routers#defaultrouter
 [generic-relations]: https://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/#id1
 [2.2-announcement]: ../topics/2.2-announcement.md
 [drf-nested-routers]: https://github.com/alanjds/drf-nested-routers
+[drf-nested-relations]: https://github.com/Ian-Foote/rest-framework-generic-relations
diff --git a/docs/api-guide/serializers.md b/docs/api-guide/serializers.md
index 78c2dd0..2e62078 100644
--- a/docs/api-guide/serializers.md
+++ b/docs/api-guide/serializers.md
@@ -43,7 +43,7 @@ We can now use `CommentSerializer` to serialize a comment, or list of comments.
 
     serializer = CommentSerializer(comment)
     serializer.data
-    # {'email': u'leila at example.com', 'content': u'foo bar', 'created': datetime.datetime(2012, 8, 22, 16, 20, 9, 822774)}
+    # {'email': 'leila at example.com', 'content': 'foo bar', 'created': '2016-01-27T15:17:10.375877'}
 
 At this point we've translated the model instance into Python native datatypes.  To finalise the serialization process we render the data into `json`.
 
@@ -51,7 +51,7 @@ At this point we've translated the model instance into Python native datatypes.
 
     json = JSONRenderer().render(serializer.data)
     json
-    # '{"email": "leila at example.com", "content": "foo bar", "created": "2012-08-22T16:20:09.822"}'
+    # b'{"email":"leila at example.com","content":"foo bar","created":"2016-01-27T15:17:10.375877"}'
 
 ## Deserializing objects
 
@@ -384,7 +384,7 @@ This manager class now more nicely encapsulates that user instances and profile
             has_support_contract=validated_data['profile']['has_support_contract']
         )
 
-For more details on this approach see the Django documentation on [model managers](model-managers), and [this blogpost on using model and manager classes](encapsulation-blogpost).
+For more details on this approach see the Django documentation on [model managers][model-managers], and [this blogpost on using model and manager classes][encapsulation-blogpost].
 
 ## Dealing with multiple objects
 
@@ -775,6 +775,8 @@ To support multiple updates you'll need to do so explicitly. When writing your m
 * How should removals be handled? Do they imply object deletion, or removing a relationship? Should they be silently ignored, or are they invalid?
 * How should ordering be handled? Does changing the position of two items imply any state change or is it ignored?
 
+You will need to add an explicit `id` field to the instance serializer. The default implicitly-generated `id` field is marked as `read_only`. This causes it to be removed on updates. Once you declare it explicitly, it will be available in the list serializer's `update` method.
+
 Here's an example of how you might choose to implement multiple updates:
 
     class BookListSerializer(serializers.ListSerializer):
@@ -786,7 +788,7 @@ Here's an example of how you might choose to implement multiple updates:
             # Perform creations and updates.
             ret = []
             for book_id, data in data_mapping.items():
-                book = book_mapping.get(book_id, None):
+                book = book_mapping.get(book_id, None)
                 if book is None:
                     ret.append(self.child.create(data))
                 else:
@@ -805,6 +807,8 @@ Here's an example of how you might choose to implement multiple updates:
         id = serializers.IntegerField()
 
         ...
+        id = serializers.IntegerField(required=False)
+
         class Meta:
             list_serializer_class = BookListSerializer
 
diff --git a/docs/api-guide/settings.md b/docs/api-guide/settings.md
index 23691de..f218d00 100644
--- a/docs/api-guide/settings.md
+++ b/docs/api-guide/settings.md
@@ -102,9 +102,15 @@ Default: `'rest_framework.negotiation.DefaultContentNegotiation'`
 
 #### DEFAULT_PAGINATION_SERIALIZER_CLASS
 
-A class the determines the default serialization style for paginated responses.
+---
+
+**This setting has been removed.**
 
-Default: `rest_framework.pagination.PaginationSerializer`
+The pagination API does not use serializers to determine the output format, and
+you'll need to instead override the `get_paginated_response method on a
+pagination class in order to specify how the output format is controlled.
+
+---
 
 #### DEFAULT_FILTER_BACKENDS
 
@@ -113,60 +119,39 @@ If set to `None` then generic filtering is disabled.
 
 #### PAGINATE_BY
 
-The default page size to use for pagination.  If set to `None`, pagination is disabled by default.
-
-Default: `None`
-
-#### PAGINATE_BY_PARAM
-
 ---
 
-**This setting is pending deprecation.**
+**This setting has been removed.**
 
 See the pagination documentation for further guidance on [setting the pagination style](pagination.md#modifying-the-pagination-style).
 
 ---
 
-The name of a query parameter, which can be used by the client to override the default page size to use for pagination.  If set to `None`, clients may not override the default page size.
-
-For example, given the following settings:
-
-    REST_FRAMEWORK = {
-    	'PAGINATE_BY': 10,
-    	'PAGINATE_BY_PARAM': 'page_size',
-    }
+#### PAGE_SIZE
 
-A client would be able to modify the pagination size by using the `page_size` query parameter.  For example:
-
-    GET http://example.com/api/accounts?page_size=25
+The default page size to use for pagination.  If set to `None`, pagination is disabled by default.
 
 Default: `None`
 
-#### MAX_PAGINATE_BY
+#### PAGINATE_BY_PARAM
 
 ---
 
-**This setting is pending deprecation.**
+**This setting has been removed.**
 
 See the pagination documentation for further guidance on [setting the pagination style](pagination.md#modifying-the-pagination-style).
 
 ---
 
-The maximum page size to allow when the page size is specified by the client.  If set to `None`, then no maximum limit is applied.
-
-For example, given the following settings:
+#### MAX_PAGINATE_BY
 
-    REST_FRAMEWORK = {
-    	'PAGINATE_BY': 10,
-    	'PAGINATE_BY_PARAM': 'page_size',
-        'MAX_PAGINATE_BY': 100
-    }
+---
 
-A client request like the following would return a paginated list of up to 100 items.
+**This setting is pending deprecation.**
 
-    GET http://example.com/api/accounts?page_size=999
+See the pagination documentation for further guidance on [setting the pagination style](pagination.md#modifying-the-pagination-style).
 
-Default: `None`
+---
 
 ### SEARCH_PARAM
 
diff --git a/docs/api-guide/status-codes.md b/docs/api-guide/status-codes.md
index d81e092..398c048 100644
--- a/docs/api-guide/status-codes.md
+++ b/docs/api-guide/status-codes.md
@@ -89,6 +89,7 @@ The 4xx class of status code is intended for cases in which the client seems to
     HTTP_428_PRECONDITION_REQUIRED
     HTTP_429_TOO_MANY_REQUESTS
     HTTP_431_REQUEST_HEADER_FIELDS_TOO_LARGE
+    HTTP_451_UNAVAILABLE_FOR_LEGAL_REASONS
 
 ## Server Error - 5xx
 
diff --git a/docs/api-guide/versioning.md b/docs/api-guide/versioning.md
index f6e32f4..54aa017 100644
--- a/docs/api-guide/versioning.md
+++ b/docs/api-guide/versioning.md
@@ -143,7 +143,7 @@ Your URL conf must include a pattern that matches the version with a `'version'`
 
 ## NamespaceVersioning
 
-To the client, this scheme is the same as `URLParameterVersioning`. The only difference is how it is configured in your Django application, as it uses URL namespacing, instead of URL keyword arguments.
+To the client, this scheme is the same as `URLPathVersioning`. The only difference is how it is configured in your Django application, as it uses URL namespacing, instead of URL keyword arguments.
 
     GET /v1/something/ HTTP/1.1
     Host: example.com
@@ -165,7 +165,7 @@ In the following example we're giving a set of views two different possible URL
         url(r'^v2/bookings/', include('bookings.urls', namespace='v2'))
     ]
 
-Both `URLParameterVersioning` and `NamespaceVersioning` are reasonable if you just need a simple versioning scheme. The `URLParameterVersioning` approach might be better suitable for small ad-hoc projects, and the `NamespaceVersioning` is probably easier to manage for larger projects.
+Both `URLPathVersioning` and `NamespaceVersioning` are reasonable if you just need a simple versioning scheme. The `URLPathVersioning` approach might be better suitable for small ad-hoc projects, and the `NamespaceVersioning` is probably easier to manage for larger projects.
 
 ## HostNameVersioning
 
@@ -214,7 +214,7 @@ If your versioning scheme is based on the request URL, you will also want to alt
 [cite]: http://www.slideshare.net/evolve_conference/201308-fielding-evolve/31
 [roy-fielding-on-versioning]: http://www.infoq.com/articles/roy-fielding-on-versioning
 [klabnik-guidelines]: http://blog.steveklabnik.com/posts/2011-07-03-nobody-understands-rest-or-http#i_want_my_api_to_be_versioned
-[heroku-guidelines]: https://github.com/interagent/http-api-design#version-with-accepts-header
+[heroku-guidelines]: https://github.com/interagent/http-api-design/blob/master/en/foundations/require-versioning-in-the-accepts-header.md
 [json-parameters]: http://tools.ietf.org/html/rfc4627#section-6
 [vendor-media-type]: http://en.wikipedia.org/wiki/Internet_media_type#Vendor_tree
 [lvh]: https://reinteractive.net/posts/199-developing-and-testing-rails-applications-with-subdomains
diff --git a/docs/img/drfdocs.png b/docs/img/drfdocs.png
new file mode 100644
index 0000000..0cccb41
Binary files /dev/null and b/docs/img/drfdocs.png differ
diff --git a/docs/img/rest-framework-docs.png b/docs/img/rest-framework-docs.png
deleted file mode 100644
index 736a009..0000000
Binary files a/docs/img/rest-framework-docs.png and /dev/null differ
diff --git a/docs/index.md b/docs/index.md
index 622e35a..a2635c0 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -231,7 +231,7 @@ Send a description of the issue via email to [rest-framework-security at googlegrou
 
 ## License
 
-Copyright (c) 2011-2015, Tom Christie
+Copyright (c) 2011-2016, Tom Christie
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
diff --git a/docs/topics/browsable-api.md b/docs/topics/browsable-api.md
index 0e12f92..3df95f0 100644
--- a/docs/topics/browsable-api.md
+++ b/docs/topics/browsable-api.md
@@ -17,7 +17,7 @@ By default, the API will return the format specified by the headers, which in th
 
 ## Customizing
 
-The browsable API is built with [Twitter's Bootstrap][bootstrap] (v 2.1.1), making it easy to customize the look-and-feel.
+The browsable API is built with [Twitter's Bootstrap][bootstrap] (v 3.3.5), making it easy to customize the look-and-feel.
 
 To customize the default style, create a template called `rest_framework/api.html` that extends from `rest_framework/base.html`.  For example:
 
diff --git a/docs/topics/documenting-your-api.md b/docs/topics/documenting-your-api.md
index d65e251..e7d2cde 100644
--- a/docs/topics/documenting-your-api.md
+++ b/docs/topics/documenting-your-api.md
@@ -12,23 +12,29 @@ The most common way to document Web APIs today is to produce documentation that
 
 ---
 
-#### Django REST Swagger
+#### DRF Docs
 
-Marc Gibbons' [Django REST Swagger][django-rest-swagger] integrates REST framework with the [Swagger][swagger] API documentation tool.  The package produces well presented API documentation, and includes interactive tools for testing API endpoints.
+[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.
 
-The package is fully documented, well supported, and comes highly recommended.
+Features include customizing the template with your branding, settings for hiding the docs depending on the environment and more.
 
-Django REST Swagger supports REST framework versions 2.3 and above.
+Both this package and Django REST Swagger are fully documented, well supported, and come highly recommended.
 
-![Screenshot - Django REST Swagger][image-django-rest-swagger]
+![Screenshot - DRF docs][image-drf-docs]
 
 ---
 
-#### REST Framework Docs
+#### Django REST Swagger
 
-The [REST Framework Docs][rest-framework-docs] package is an earlier project, also by Marc Gibbons, that offers clean, simple autogenerated documentation for your API.
+Marc Gibbons' [Django REST Swagger][django-rest-swagger] integrates REST framework with the [Swagger][swagger] API documentation tool.  The package produces well presented API documentation, and includes interactive tools for testing API endpoints.
 
-![Screenshot - REST Framework Docs][image-rest-framework-docs]
+Django REST Swagger supports REST framework versions 2.3 and above.
+
+Mark is also the author of the [REST Framework Docs][rest-framework-docs] package which offers clean, simple autogenerated documentation for your API but is deprecated and has moved to Django REST Swagger.
+
+Both this package and DRF docs are fully documented, well supported, and come highly recommended.
+
+![Screenshot - Django REST Swagger][image-django-rest-swagger]
 
 ---
 
@@ -100,13 +106,16 @@ In this approach, rather than documenting the available API endpoints up front,
 To implement a hypermedia API you'll need to decide on an appropriate media type for the API, and implement a custom renderer and parser for that media type.  The [REST, Hypermedia & HATEOAS][hypermedia-docs] section of the documentation includes pointers to background reading, as well as links to various hypermedia formats.
 
 [cite]: http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
+[drfdocs-repo]: https://github.com/ekonstantinidis/django-rest-framework-docs
+[drfdocs-website]: http://www.drfdocs.com/
+[drfdocs-demo]: http://demo.drfdocs.com/
 [django-rest-swagger]: https://github.com/marcgibbons/django-rest-swagger
 [swagger]: https://developers.helloreverb.com/swagger/
 [rest-framework-docs]: https://github.com/marcgibbons/django-rest-framework-docs
 [apiary]: http://apiary.io/
 [markdown]: http://daringfireball.net/projects/markdown/
 [hypermedia-docs]: rest-hypermedia-hateoas.md
+[image-drf-docs]: ../img/drfdocs.png
 [image-django-rest-swagger]: ../img/django-rest-swagger.png
-[image-rest-framework-docs]: ../img/rest-framework-docs.png
 [image-apiary]: ../img/apiary.png
 [image-self-describing-api]: ../img/self-describing.png
diff --git a/docs/topics/html-and-forms.md b/docs/topics/html-and-forms.md
index 7b8f1cc..6660607 100644
--- a/docs/topics/html-and-forms.md
+++ b/docs/topics/html-and-forms.md
@@ -66,9 +66,10 @@ The following view demonstrates an example of using a serializer in a template f
 
         def post(self, request, pk):
             profile = get_object_or_404(Profile, pk=pk)
-            serializer = ProfileSerializer(profile)
+            serializer = ProfileSerializer(profile, data=request.data)
             if not serializer.is_valid():
                 return Response({'serializer': serializer, 'profile': profile})
+            serializer.save()
             return redirect('profile-list')
 
 **profile_detail.html**:
diff --git a/docs/topics/release-notes.md b/docs/topics/release-notes.md
index d21f8e5..f2187a3 100644
--- a/docs/topics/release-notes.md
+++ b/docs/topics/release-notes.md
@@ -40,6 +40,37 @@ You can determine your currently installed version using `pip freeze`:
 
 ## 3.3.x series
 
+### 3.3.3
+
+**Date**: [14th March 2016][3.3.3-milestone].
+
+* Remove version string from templates. Thanks to @blag for the report and fixes. ([#3878][gh3878], [#3913][gh3913], [#3912][gh3912])
+* Fixes vertical html layout for `BooleanField`. Thanks to Mikalai Radchuk for the fix. ([#3910][gh3910])
+* Silenced deprecation warnings on Django 1.8. Thanks to Simon Charette for the fix. ([#3903][gh3903])
+* Internationalization for authtoken. Thanks to Michael Nacharov for the fix. ([#3887][gh3887], [#3968][gh3968])
+* Fix `Token` model as `abstract` when the authtoken application isn't declared. Thanks to Adam Thomas for the report. ([#3860][gh3860], [#3858][gh3858])
+* Improve Markdown version compatibility. Thanks to Michael J. Schultz for the fix. ([#3604][gh3604], [#3842][gh3842])
+* `QueryParameterVersioning` does not use `DEFAULT_VERSION` setting. Thanks to Brad Montgomery for the fix. ([#3833][gh3833])
+* Add an explicit `on_delete` on the models. Thanks to Mads Jensen for the fix. ([#3832][gh3832])
+* Fix `DateField.to_representation` to work with Python 2 unicode. Thanks to Mikalai Radchuk for the fix. ([#3819][gh3819])
+* Fixed `TimeField` not handling string times. Thanks to Areski Belaid for the fix. ([#3809][gh3809])
+* Avoid updates of `Meta.extra_kwargs`. Thanks to Kevin Massey for the report and fix. ([#3805][gh3805], [#3804][gh3804])
+* Fix nested validation error being rendered incorrectly. Thanks to Craig de Stigter for the fix. ([#3801][gh3801])
+* Document how to avoid CSRF and missing button issues with `django-crispy-forms`. Thanks to Emmanuelle Delescolle, José Padilla and Luis San Pablo for the report, analysis and fix. ([#3787][gh3787], [#3636][gh3636], [#3637][gh3637])
+* Improve Rest Framework Settings file setup time. Thanks to Miles Hutson for the report and Mads Jensen for the fix. ([#3786][gh3786], [#3815][gh3815])
+* Improve authtoken compatibility with Django 1.9. Thanks to S. Andrew Sheppard for the fix. ([#3785][gh3785])
+* Fix `Min/MaxValueValidator` transfer from a model's `DecimalField`. Thanks to Kevin Brown for the fix. ([#3774][gh3774])
+* Improve HTML title in the Browsable API. Thanks to Mike Lissner for the report and fix. ([#3769][gh3769])
+* Fix `AutoFilterSet` to inherit from `default_filter_set`. Thanks to Tom Linford for the fix. ([#3753][gh3753])
+* Fix transifex config to handle the new Chinese language codes. Thanks to @nypisces for the report and fix. ([#3739][gh3739])
+* `DateTimeField` does not handle empty values correctly. Thanks to Mick Parker for the report and fix. ([#3731][gh3731], [#3726][gh3728])
+* Raise error when setting a removed rest_framework setting. Thanks to Luis San Pablo for the fix. ([#3715][gh3715])
+* Add missing csrf_token in AdminRenderer post form. Thanks to Piotr Śniegowski for the fix. ([#3703][gh3703])
+* Refactored `_get_reverse_relationships()` to use correct `to_field`. Thanks to Benjamin Phillips for the fix. ([#3696][gh3696])
+* Document the use of `get_queryset` for `RelatedField`. Thanks to Ryan Hiebert for the fix. ([#3605][gh3605])
+* Fix empty pk detection in HyperlinkRelatedField.get_url. Thanks to @jslang for the fix ([#3962][gh3962])
+
+
 ### 3.3.2
 
 **Date**: [14th December 2015][3.3.2-milestone].
@@ -370,6 +401,7 @@ For older release notes, [please see the version 2.x documentation][old-release-
 [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.0.1 -->
 [gh2013]: https://github.com/tomchristie/django-rest-framework/issues/2013
@@ -649,3 +681,40 @@ For older release notes, [please see the version 2.x documentation][old-release-
 [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
+
+<!-- 3.3.3 -->
+[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
diff --git a/docs/topics/third-party-resources.md b/docs/topics/third-party-resources.md
index fc507de..ed15269 100644
--- a/docs/topics/third-party-resources.md
+++ b/docs/topics/third-party-resources.md
@@ -202,6 +202,7 @@ To submit new content, [open an issue][drf-create-issue] or [create a pull reque
 * [django-rest-framework-mongoengine][django-rest-framework-mongoengine] - Serializer class that supports using MongoDB as the storage layer for Django REST framework.
 * [djangorestframework-gis][djangorestframework-gis] - Geographic add-ons
 * [djangorestframework-hstore][djangorestframework-hstore] - Serializer class to support django-hstore DictionaryField model field and its schema-mode feature.
+* [djangorestframework-jsonapi][djangorestframework-jsonapi] - Provides a parser, renderer, serializers, and other tools to help build an API that is compliant with the jsonapi.org spec.
 
 ### Serializer fields
 
@@ -222,11 +223,13 @@ To submit new content, [open an issue][drf-create-issue] or [create a pull reque
 ### Parsers
 
 * [djangorestframework-msgpack][djangorestframework-msgpack] - Provides MessagePack renderer and parser support.
+* [djangorestframework-jsonapi][djangorestframework-jsonapi] - Provides a parser, renderer, serializers, and other tools to help build an API that is compliant with the jsonapi.org spec.
 * [djangorestframework-camel-case][djangorestframework-camel-case] - Provides camel case JSON renderers and parsers.
 
 ### Renderers
 
 * [djangorestframework-csv][djangorestframework-csv] - Provides CSV renderer support.
+* [djangorestframework-jsonapi][djangorestframework-jsonapi] - Provides a parser, renderer, serializers, and other tools to help build an API that is compliant with the jsonapi.org spec.
 * [drf_ujson][drf_ujson] - Implements JSON rendering using the UJSON package.
 * [rest-pandas][rest-pandas] - Pandas DataFrame-powered renderers including Excel, CSV, and SVG formats.
 
@@ -351,3 +354,4 @@ To submit new content, [open an issue][drf-create-issue] or [create a pull reque
 [cookiecutter-django-rest]:  https://github.com/agconti/cookiecutter-django-rest
 [drf-haystack]: http://drf-haystack.readthedocs.org/en/latest/
 [django-rest-framework-version-transforms]: https://github.com/mrhwick/django-rest-framework-version-transforms
+[djangorestframework-jsonapi]: https://github.com/django-json-api/django-rest-framework-json-api
diff --git a/docs/tutorial/1-serialization.md b/docs/tutorial/1-serialization.md
index 890f8d5..87856e0 100644
--- a/docs/tutorial/1-serialization.md
+++ b/docs/tutorial/1-serialization.md
@@ -45,15 +45,9 @@ We'll need to add our new `snippets` app and the `rest_framework` app to `INSTAL
     INSTALLED_APPS = (
         ...
         'rest_framework',
-        'snippets',
+        'snippets.apps.SnippetsConfig',
     )
 
-We also need to wire up the root urlconf, in the `tutorial/urls.py` file, to include our snippet app's URLs.
-
-    urlpatterns = [
-        url(r'^', include('snippets.urls')),
-    ]
-
 Okay, we're ready to roll.
 
 ## Creating a model to work with
@@ -165,7 +159,7 @@ Deserialization is similar.  First we parse a stream into Python native datatype
     stream = BytesIO(content)
     data = JSONParser().parse(stream)
 
-...then we restore those native datatypes into to a fully populated object instance.
+...then we restore those native datatypes into a fully populated object instance.
 
     serializer = SnippetSerializer(data=data)
     serializer.is_valid()
@@ -199,16 +193,16 @@ Open the file `snippets/serializers.py` again, and replace the `SnippetSerialize
 
 One nice property that serializers have is that you can inspect all the fields in a serializer instance, by printing its representation. Open the Django shell with `python manage.py shell`, then try the following:
 
-    >>> from snippets.serializers import SnippetSerializer
-    >>> serializer = SnippetSerializer()
-    >>> print(repr(serializer))
-    SnippetSerializer():
-        id = IntegerField(label='ID', read_only=True)
-        title = CharField(allow_blank=True, max_length=100, required=False)
-        code = CharField(style={'base_template': 'textarea.html'})
-        linenos = BooleanField(required=False)
-        language = ChoiceField(choices=[('Clipper', 'FoxPro'), ('Cucumber', 'Gherkin'), ('RobotFramework', 'RobotFramework'), ('abap', 'ABAP'), ('ada', 'Ada')...
-        style = ChoiceField(choices=[('autumn', 'autumn'), ('borland', 'borland'), ('bw', 'bw'), ('colorful', 'colorful')...
+    from snippets.serializers import SnippetSerializer
+    serializer = SnippetSerializer()
+    print(repr(serializer))
+    # SnippetSerializer():
+    #    id = IntegerField(label='ID', read_only=True)
+    #    title = CharField(allow_blank=True, max_length=100, required=False)
+    #    code = CharField(style={'base_template': 'textarea.html'})
+    #    linenos = BooleanField(required=False)
+    #    language = ChoiceField(choices=[('Clipper', 'FoxPro'), ('Cucumber', 'Gherkin'), ('RobotFramework', 'RobotFramework'), ('abap', 'ABAP'), ('ada', 'Ada')...
+    #    style = ChoiceField(choices=[('autumn', 'autumn'), ('borland', 'borland'), ('bw', 'bw'), ('colorful', 'colorful')...
 
 It's important to remember that `ModelSerializer` classes don't do anything particularly magical, they are simply a shortcut for creating serializer classes:
 
@@ -300,6 +294,14 @@ Finally we need to wire these views up.  Create the `snippets/urls.py` file:
         url(r'^snippets/(?P<pk>[0-9]+)/$', views.snippet_detail),
     ]
 
+We also need to wire up the root urlconf, in the `tutorial/urls.py` file, to include our snippet app's URLs.
+
+    from django.conf.urls import url, include
+
+    urlpatterns = [
+        url(r'^', include('snippets.urls')),
+    ]
+
 It's worth noting that there are a couple of edge cases we're not dealing with properly at the moment.  If we send malformed `json`, or if a request is made with a method that the view doesn't handle, then we'll end up with a 500 "server error" response.  Still, this'll do for now.
 
 ## Testing our first attempt at a Web API
@@ -323,7 +325,7 @@ Quit out of the shell...
 
 In another terminal window, we can test the server.
 
-We can test our API using using [curl][curl] or [httpie][httpie]. Httpie is a user friendly http client that's written in Python. Let's install that.
+We can test our API using [curl][curl] or [httpie][httpie]. Httpie is a user friendly http client that's written in Python. Let's install that.
 
 You can install httpie using pip:
 
diff --git a/docs/tutorial/4-authentication-and-permissions.md b/docs/tutorial/4-authentication-and-permissions.md
index 8a9d73e..74fe518 100644
--- a/docs/tutorial/4-authentication-and-permissions.md
+++ b/docs/tutorial/4-authentication-and-permissions.md
@@ -206,7 +206,7 @@ If we try to create a snippet without authenticating, we'll get an error:
 
 We can make a successful request by including the username and password of one of the users we created earlier.
 
-    http -a tom:password POST http://127.0.0.1:8000/snippets/ code="print 789"
+    http -a tom:password123 POST http://127.0.0.1:8000/snippets/ code="print 789"
 
     {
         "id": 5,
diff --git a/docs/tutorial/5-relationships-and-hyperlinked-apis.md b/docs/tutorial/5-relationships-and-hyperlinked-apis.md
index feef1fc..4b9347b 100644
--- a/docs/tutorial/5-relationships-and-hyperlinked-apis.md
+++ b/docs/tutorial/5-relationships-and-hyperlinked-apis.md
@@ -11,7 +11,7 @@ Right now we have endpoints for 'snippets' and 'users', but we don't have a sing
     from rest_framework.reverse import reverse
 
 
-    @api_view(('GET',))
+    @api_view(['GET'])
     def api_root(request, format=None):
         return Response({
             'users': reverse('user-list', request=request, format=format),
diff --git a/docs/tutorial/quickstart.md b/docs/tutorial/quickstart.md
index 2bb2743..5e3b522 100644
--- a/docs/tutorial/quickstart.md
+++ b/docs/tutorial/quickstart.md
@@ -28,7 +28,7 @@ Now sync your database for the first time:
 
     python manage.py migrate
 
-We'll also create an initial user named `admin` with a password of `password`. We'll authenticate as that user later in our example.
+We'll also create an initial user named `admin` with a password of `password123`. We'll authenticate as that user later in our example.
 
     python manage.py createsuperuser
 
@@ -134,7 +134,7 @@ We're now ready to test the API we've built.  Let's fire up the server from the
 
 We can now access our API, both from the command-line, using tools like `curl`...
 
-    bash: curl -H 'Accept: application/json; indent=4' -u admin:password http://127.0.0.1:8000/users/
+    bash: curl -H 'Accept: application/json; indent=4' -u admin:password123 http://127.0.0.1:8000/users/
     {
... 16315 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