diff options
| author | Robert Romano | 2012-11-18 21:07:44 -0800 | 
|---|---|---|
| committer | Robert Romano | 2012-11-18 21:07:44 -0800 | 
| commit | f5f1ac49ec9d9cb180a00c791f2701c3f5a2d65b (patch) | |
| tree | 663e254f3125d1281035d471fc4fa38d7ca3ee3d /docs/api-guide | |
| parent | d541e0c42326443b613df764cbe26a68b852b71d (diff) | |
| parent | d1472740bc5f08871343d1a63e409e34d05504cb (diff) | |
| download | django-rest-framework-f5f1ac49ec9d9cb180a00c791f2701c3f5a2d65b.tar.bz2 | |
Update robromano fork with upstream master
Conflicts:
	docs/topics/credits.md
	docs/topics/release-notes.md
Diffstat (limited to 'docs/api-guide')
| -rw-r--r-- | docs/api-guide/fields.md | 40 | ||||
| -rw-r--r-- | docs/api-guide/filtering.md | 7 | ||||
| -rw-r--r-- | docs/api-guide/generic-views.md | 36 | ||||
| -rw-r--r-- | docs/api-guide/pagination.md | 33 | ||||
| -rw-r--r-- | docs/api-guide/settings.md | 22 | 
5 files changed, 122 insertions, 16 deletions
diff --git a/docs/api-guide/fields.md b/docs/api-guide/fields.md index 0485b158..d1c31ecc 100644 --- a/docs/api-guide/fields.md +++ b/docs/api-guide/fields.md @@ -131,6 +131,18 @@ or `django.db.models.fields.TextField`.  **Signature:** `CharField(max_length=None, min_length=None)` +## URLField + +Corresponds to `django.db.models.fields.URLField`. Uses Django's `django.core.validators.URLValidator` for validation. + +**Signature:** `CharField(max_length=200, min_length=None)` + +## SlugField + +Corresponds to `django.db.models.fields.SlugField`. + +**Signature:** `CharField(max_length=50, min_length=None)` +  ## ChoiceField  A field that can accept a value out of a limited set of choices. @@ -165,6 +177,33 @@ A floating point representation.  Corresponds to `django.db.models.fields.FloatField`. +## FileField + +A file representation. Performs Django's standard FileField validation.  + +Corresponds to `django.forms.fields.FileField`. + +**Signature:** `FileField(max_length=None, allow_empty_file=False)` + + - `max_length` designates the maximum length for the file name. +   + - `allow_empty_file` designates if empty files are allowed. + +## ImageField + +An image representation. + +Corresponds to `django.forms.fields.ImageField`. + +Requires the `PIL` package. + +Signature and validation is the same as with `FileField`. + +--- + +**Note:** `FileFields` and `ImageFields` are only suitable for use with MultiPartParser, since eg json doesn't support file uploads. +Django's regular [FILE_UPLOAD_HANDLERS] are used for handling uploaded files.  +  ---  # Relational Fields @@ -286,3 +325,4 @@ This field is always read-only.  * `slug_url_kwarg` - The named url parameter for the slug field lookup. Default is to use the same value as given for `slug_field`.  [cite]: http://www.python.org/dev/peps/pep-0020/ +[FILE_UPLOAD_HANDLERS]: https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-FILE_UPLOAD_HANDLERS diff --git a/docs/api-guide/filtering.md b/docs/api-guide/filtering.md index 14ab9a26..53ea7cbc 100644 --- a/docs/api-guide/filtering.md +++ b/docs/api-guide/filtering.md @@ -71,7 +71,7 @@ We can override `.get_queryset()` to deal with URLs such as `http://example.com/              by filtering against a `username` query parameter in the URL.              """              queryset = Purchase.objects.all() -            username = self.request.QUERY_PARAMS.get('username', None): +            username = self.request.QUERY_PARAMS.get('username', None)              if username is not None:                  queryset = queryset.filter(purchaser__username=username)              return queryset @@ -84,9 +84,9 @@ As well as being able to override the default queryset, REST framework also incl  REST framework supports pluggable backends to implement filtering, and provides an implementation which uses the [django-filter] package. -To use REST framework's default filtering backend, first install `django-filter`. +To use REST framework's filtering backend, first install `django-filter`. -    pip install -e git+https://github.com/alex/django-filter.git#egg=django-filter +    pip install django-filter  You must also set the filter backend to `DjangoFilterBackend` in your settings: @@ -94,7 +94,6 @@ You must also set the filter backend to `DjangoFilterBackend` in your settings:          'FILTER_BACKEND': 'rest_framework.filters.DjangoFilterBackend'      } -**Note**: The currently supported version of `django-filter` is the `master` branch.  A PyPI release is expected to be coming soon.  ## Specifying filter fields diff --git a/docs/api-guide/generic-views.md b/docs/api-guide/generic-views.md index 360ef1a2..428323b8 100644 --- a/docs/api-guide/generic-views.md +++ b/docs/api-guide/generic-views.md @@ -123,18 +123,36 @@ Each of the generic views provided is built by combining one of the base views b  Extends REST framework's `APIView` class, adding support for serialization of model instances and model querysets. +**Attributes**: + +* `model` - The model that should be used for this view.  Used as a fallback for determining the serializer if `serializer_class` is not set, and as a fallback for determining the queryset if `queryset` is not set.  Otherwise not required. +* `serializer_class` - The serializer class that should be used for validating and deserializing input, and for serializing output.  If unset, this defaults to creating a serializer class using `self.model`, with the `DEFAULT_MODEL_SERIALIZER_CLASS` setting as the base serializer class. +  ## MultipleObjectAPIView  Provides a base view for acting on a single object, by combining REST framework's `APIView`, and Django's [MultipleObjectMixin].  **See also:** ccbv.co.uk documentation for [MultipleObjectMixin][multiple-object-mixin-classy]. +**Attributes**: + +* `queryset` - The queryset that should be used for returning objects from this view.  If unset, defaults to the default queryset manager for `self.model`. +* `paginate_by` - The size of pages to use with paginated data.  If set to `None` then pagination is turned off.  If unset this uses the same value as the `PAGINATE_BY` setting, which defaults to `None`. +* `paginate_by_param` - The name of a query parameter, which can be used by the client to overide the default page size to use for pagination.  If unset this uses the same value as the `PAGINATE_BY_PARAM` setting, which defaults to `None`. +  ## SingleObjectAPIView  Provides a base view for acting on a single object, by combining REST framework's `APIView`, and Django's [SingleObjectMixin].  **See also:** ccbv.co.uk documentation for [SingleObjectMixin][single-object-mixin-classy]. +**Attributes**: + +* `queryset` - The queryset that should be used when retrieving an object from this view.  If unset, defaults to the default queryset manager for `self.model`. +* `pk_kwarg` - The URL kwarg that should be used to look up objects by primary key. Defaults to `'pk'`. [Can only be set to non-default on Django 1.4+] +* `slug_kwarg` - The URL kwarg that should be used to look up objects by a slug. Defaults to `'slug'`.  [Can only be set to non-default on Django 1.4+] +* `slug_field` - The field on the model that should be used to look up objects by a slug.  If used, this should typically be set to a field with `unique=True`. Defaults to `'slug'`. +  ---  # Mixins @@ -145,30 +163,48 @@ The mixin classes provide the actions that are used to provide the basic view be  Provides a `.list(request, *args, **kwargs)` method, that implements listing a queryset. +If the queryset is populated, this returns a `200 OK` response, with a serialized representation of the queryset as the body of the response.  The response data may optionally be paginated. + +If the queryset is empty this returns a `200 OK` reponse, unless the `.allow_empty` attribute on the view is set to `False`, in which case it will return a `404 Not Found`. +  Should be mixed in with [MultipleObjectAPIView].  ## CreateModelMixin  Provides a `.create(request, *args, **kwargs)` method, that implements creating and saving a new model instance. +If an object is created this returns a `201 Created` response, with a serialized representation of the object as the body of the response.  If the representation contains a key named `url`, then the `Location` header of the response will be populated with that value. + +If the request data provided for creating the object was invalid, a `400 Bad Request` response will be returned, with the error details as the body of the response. +  Should be mixed in with any [GenericAPIView].  ## RetrieveModelMixin  Provides a `.retrieve(request, *args, **kwargs)` method, that implements returning an existing model instance in a response. +If an object can be retrieve this returns a `200 OK` response, with a serialized representation of the object as the body of the response.  Otherwise it will return a `404 Not Found`. +  Should be mixed in with [SingleObjectAPIView].  ## UpdateModelMixin  Provides a `.update(request, *args, **kwargs)` method, that implements updating and saving an existing model instance. +If an object is updated this returns a `200 OK` response, with a serialized representation of the object as the body of the response. + +If an object is created, for example when making a `DELETE` request followed by a `PUT` request to the same URL, this returns a `201 Created` response, with a serialized representation of the object as the body of the response. + +If the request data provided for updating the object was invalid, a `400 Bad Request` response will be returned, with the error details as the body of the response. +  Should be mixed in with [SingleObjectAPIView].  ## DestroyModelMixin  Provides a `.destroy(request, *args, **kwargs)` method, that implements deletion of an existing model instance. +If an object is deleted this returns a `204 No Content` response, otherwise it will return a `404 Not Found`. +  Should be mixed in with [SingleObjectAPIView].  [cite]: https://docs.djangoproject.com/en/dev/ref/class-based-views/#base-vs-generic-views diff --git a/docs/api-guide/pagination.md b/docs/api-guide/pagination.md index 597baba4..ab335e6e 100644 --- a/docs/api-guide/pagination.md +++ b/docs/api-guide/pagination.md @@ -70,33 +70,32 @@ We could now use our pagination serializer in a view like this.              # If page is not an integer, deliver first page.              users = paginator.page(1)          except EmptyPage: -            # If page is out of range (e.g. 9999), deliver last page of results. +            # If page is out of range (e.g. 9999), +            # deliver last page of results.              users = paginator.page(paginator.num_pages)          serializer_context = {'request': request} -        serializer = PaginatedUserSerializer(instance=users, +        serializer = PaginatedUserSerializer(users,                                               context=serializer_context)          return Response(serializer.data)  ## Pagination in the generic views -The generic class based views `ListAPIView` and `ListCreateAPIView` provide pagination of the returned querysets by default.  You can customise this behaviour by altering the pagination style, by modifying the default number of results, or by turning pagination off completely. +The generic class based views `ListAPIView` and `ListCreateAPIView` provide pagination of the returned querysets by default.  You can customise this behaviour by altering the pagination style, by modifying the default number of results, by allowing clients to override the page size using a query parameter, or by turning pagination off completely. -The default pagination style may be set globally, using the `PAGINATION_SERIALIZER` and `PAGINATE_BY` settings.  For example. +The default pagination style may be set globally, using the `DEFAULT_PAGINATION_SERIALIZER_CLASS`, `PAGINATE_BY` and `PAGINATE_BY_PARAM` settings.  For example.      REST_FRAMEWORK = { -        'PAGINATION_SERIALIZER': ( -            'example_app.pagination.CustomPaginationSerializer', -        ), -        'PAGINATE_BY': 10 +        'PAGINATE_BY': 10, +        'PAGINATE_BY_PARAM': 'page_size'       }  You can also set the pagination style on a per-view basis, using the `ListAPIView` generic class-based view.      class PaginatedListView(ListAPIView):          model = ExampleModel -        pagination_serializer_class = CustomPaginationSerializer          paginate_by = 10 +        paginate_by_param = 'page_size'  For more complex requirements such as serialization that differs depending on the requested media type you can override the `.get_paginate_by()` and `.get_pagination_serializer_class()` methods. @@ -122,4 +121,20 @@ For example, to nest a pair of links labelled 'prev' and 'next', and set the nam          results_field = 'objects' +## Using your custom pagination serializer + +To have your custom pagination serializer be used by default, use the `DEFAULT_PAGINATION_SERIALIZER_CLASS` setting: + +    REST_FRAMEWORK = { +        'DEFAULT_PAGINATION_SERIALIZER_CLASS': +            'example_app.pagination.CustomPaginationSerializer', +    } + +Alternatively, to set your custom pagination serializer on a per-view basis, use the `pagination_serializer_class` attribute on a generic class based view: + +    class PaginatedListView(ListAPIView): +        model = ExampleModel +        pagination_serializer_class = CustomPaginationSerializer +        paginate_by = 10 +  [cite]: https://docs.djangoproject.com/en/dev/topics/pagination/ diff --git a/docs/api-guide/settings.md b/docs/api-guide/settings.md index 4f87b30d..7884d096 100644 --- a/docs/api-guide/settings.md +++ b/docs/api-guide/settings.md @@ -96,11 +96,21 @@ Default: `rest_framework.serializers.ModelSerializer`  Default: `rest_framework.pagination.PaginationSerializer` -## FORMAT_SUFFIX_KWARG +## FILTER_BACKEND -**TODO** +The filter backend class that should be used for generic filtering.  If set to `None` then generic filtering is disabled. -Default: `'format'` +## PAGINATE_BY + +The default page size to use for pagination.  If set to `None`, pagination is disabled by default. + +Default: `None` + +## PAGINATE_BY_KWARG + +The name of a query parameter, which can be used by the client to overide the default page size to use for pagination.  If set to `None`, clients may not override the default page size. + +Default: `None`  ## UNAUTHENTICATED_USER @@ -150,4 +160,10 @@ Default: `'accept'`  Default: `'format'` +## FORMAT_SUFFIX_KWARG + +**TODO** + +Default: `'format'` +  [cite]: http://www.python.org/dev/peps/pep-0020/  | 
