diff options
| author | Tom Christie | 2012-09-03 17:49:22 +0100 |
|---|---|---|
| committer | Tom Christie | 2012-09-03 17:49:22 +0100 |
| commit | 6e21915934686cc7d46c8144403c933fa6fd2375 (patch) | |
| tree | a11ccaa21cc735b3223cb6d81796e1ebe6bf84c2 /djangorestframework/views.py | |
| parent | a092a72844705e3129b8996b81d8424997b5d37f (diff) | |
| download | django-rest-framework-6e21915934686cc7d46c8144403c933fa6fd2375.tar.bz2 | |
First pass at mixins & generic views
Diffstat (limited to 'djangorestframework/views.py')
| -rw-r--r-- | djangorestframework/views.py | 72 |
1 files changed, 71 insertions, 1 deletions
diff --git a/djangorestframework/views.py b/djangorestframework/views.py index 389f2044..1939eed2 100644 --- a/djangorestframework/views.py +++ b/djangorestframework/views.py @@ -11,12 +11,14 @@ from django.http import Http404 from django.utils.html import escape from django.utils.safestring import mark_safe from django.views.decorators.csrf import csrf_exempt +from django.views.generic.detail import SingleObjectMixin +from django.views.generic.list import MultipleObjectMixin from djangorestframework.compat import View as _View, apply_markdown from djangorestframework.response import Response from djangorestframework.request import Request from djangorestframework.settings import api_settings -from djangorestframework import parsers, authentication, permissions, status, exceptions +from djangorestframework import parsers, authentication, permissions, status, exceptions, mixins __all__ = ( @@ -281,3 +283,71 @@ class APIView(_View): field_name_types[name] = field.__class__.__name__ content['fields'] = field_name_types raise Response(content, status=status.HTTP_200_OK) + +# TODO: .get_serializer() + + +### Abstract view classes, that do not provide any method handlers ### + +class MultipleObjectBaseView(MultipleObjectMixin, APIView): + """ + Base class for views onto a queryset. + """ + pass + + +class SingleObjectBaseView(SingleObjectMixin, APIView): + """ + Base class for views onto a model instance. + """ + pass + + +### Concrete view classes, that provide existing method handlers ### + +class ListAPIView(mixins.ListModelMixin, + MultipleObjectBaseView): + """ + Concrete view for listing a queryset. + """ + def get(self, request, *args, **kwargs): + return self.list(request, *args, **kwargs) + + +class RootAPIView(mixins.ListModelMixin, + mixins.CreateModelMixin, + MultipleObjectBaseView): + """ + Concrete view for listing a queryset or creating a model instance. + """ + def get(self, request, *args, **kwargs): + return self.list(request, *args, **kwargs) + + def post(self, request, *args, **kwargs): + return self.create(request, *args, **kwargs) + + +class DetailAPIView(mixins.RetrieveModelMixin, + SingleObjectBaseView): + """ + Concrete view for retrieving a model instance. + """ + def get(self, request, *args, **kwargs): + return self.retrieve(request, *args, **kwargs) + + +class InstanceAPIView(mixins.RetrieveModelMixin, + mixins.UpdateModelMixin, + mixins.DestroyModelMixin, + SingleObjectBaseView): + """ + Concrete view for retrieving, updating or deleting a model instance. + """ + def get(self, request, *args, **kwargs): + return self.retrieve(request, *args, **kwargs) + + def put(self, request, *args, **kwargs): + return self.update(request, *args, **kwargs) + + def delete(self, request, *args, **kwargs): + return self.destroy(request, *args, **kwargs) |
