aboutsummaryrefslogtreecommitdiffstats
path: root/djangorestframework/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'djangorestframework/views.py')
-rw-r--r--djangorestframework/views.py72
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)