aboutsummaryrefslogtreecommitdiffstats
path: root/djangorestframework
diff options
context:
space:
mode:
authorTom Christie2012-09-06 15:58:44 +0100
committerTom Christie2012-09-06 15:58:44 +0100
commitb79833ecddcea788b4a8d8901bd25f0afe83bbf7 (patch)
treebb751eabf8792bb71e3e71642f78b26664b4fed5 /djangorestframework
parentc707034649fa9e24f0c6c3c0580dc06f90eac373 (diff)
downloaddjango-rest-framework-b79833ecddcea788b4a8d8901bd25f0afe83bbf7.tar.bz2
Move generic views into seperate module
Diffstat (limited to 'djangorestframework')
-rw-r--r--djangorestframework/generics.py112
-rw-r--r--djangorestframework/views.py137
2 files changed, 117 insertions, 132 deletions
diff --git a/djangorestframework/generics.py b/djangorestframework/generics.py
new file mode 100644
index 00000000..87a2a4b8
--- /dev/null
+++ b/djangorestframework/generics.py
@@ -0,0 +1,112 @@
+"""
+Generic views that provide commmonly needed behaviour.
+"""
+
+from djangorestframework import views, mixins
+from django.views.generic.detail import SingleObjectMixin
+from django.views.generic.list import MultipleObjectMixin
+
+
+### Base classes for the generic views ###
+
+class BaseView(views.APIView):
+ """
+ Base class for all other generic views.
+ """
+ serializer_class = None
+
+ def get_serializer(self, data=None, files=None, instance=None):
+ # TODO: add support for files
+ # TODO: add support for seperate serializer/deserializer
+ context = {
+ 'request': self.request,
+ 'format': self.kwargs.get('format', None)
+ }
+ return self.serializer_class(data, instance=instance, context=context)
+
+
+class MultipleObjectBaseView(MultipleObjectMixin, BaseView):
+ """
+ Base class for generic views onto a queryset.
+ """
+ pass
+
+
+class SingleObjectBaseView(SingleObjectMixin, BaseView):
+ """
+ Base class for generic views onto a model instance.
+ """
+
+ def get_object(self):
+ """
+ Override default to add support for object-level permissions.
+ """
+ super(self, SingleObjectBaseView).get_object()
+ self.check_permissions(self.request, self.object)
+
+
+### Concrete view classes that provide method handlers ###
+### by composing the mixin classes with a base view. ###
+
+class ListAPIView(mixins.ListModelMixin,
+ mixins.MetadataMixin,
+ MultipleObjectBaseView):
+ """
+ Concrete view for listing a queryset.
+ """
+ def get(self, request, *args, **kwargs):
+ return self.list(request, *args, **kwargs)
+
+ def options(self, request, *args, **kwargs):
+ return self.metadata(request, *args, **kwargs)
+
+
+class RootAPIView(mixins.ListModelMixin,
+ mixins.CreateModelMixin,
+ mixins.MetadataMixin,
+ 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)
+
+ def options(self, request, *args, **kwargs):
+ return self.metadata(request, *args, **kwargs)
+
+
+class DetailAPIView(mixins.RetrieveModelMixin,
+ mixins.MetadataMixin,
+ SingleObjectBaseView):
+ """
+ Concrete view for retrieving a model instance.
+ """
+ def get(self, request, *args, **kwargs):
+ return self.retrieve(request, *args, **kwargs)
+
+ def options(self, request, *args, **kwargs):
+ return self.metadata(request, *args, **kwargs)
+
+
+class InstanceAPIView(mixins.RetrieveModelMixin,
+ mixins.UpdateModelMixin,
+ mixins.DestroyModelMixin,
+ mixins.MetadataMixin,
+ 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)
+
+ def options(self, request, *args, **kwargs):
+ return self.metadata(request, *args, **kwargs)
diff --git a/djangorestframework/views.py b/djangorestframework/views.py
index e4d47a31..43feee9c 100644
--- a/djangorestframework/views.py
+++ b/djangorestframework/views.py
@@ -11,14 +11,12 @@ 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, status, exceptions, mixins
+from djangorestframework import status, exceptions
def _remove_trailing_string(content, trailing):
@@ -57,30 +55,10 @@ def _camelcase_to_spaces(content):
class APIView(_View):
renderers = api_settings.DEFAULT_RENDERERS
- """
- List of renderer classes the view can serialize the response with, ordered by preference.
- """
-
- parsers = parsers.DEFAULT_PARSERS
- """
- List of parser classes the view can parse the request with.
- """
-
- authentication = (authentication.SessionAuthentication,
- authentication.UserBasicAuthentication)
- """
- List of all authenticating methods to attempt.
- """
-
- throttle_classes = ()
- """
- List of all throttles to check.
- """
-
- permission_classes = ()
- """
- List of all permissions that must be checked.
- """
+ parsers = api_settings.DEFAULT_PARSERS
+ authentication = api_settings.DEFAULT_AUTHENTICATION
+ throttle_classes = api_settings.DEFAULT_THROTTLES
+ permission_classes = api_settings.DEFAULT_PERMISSIONS
@classmethod
def as_view(cls, **initkwargs):
@@ -300,108 +278,3 @@ class APIView(_View):
self.response = self.finalize_response(request, response, *args, **kwargs)
return self.response
-
-
-# Abstract view classes that do not provide any method handlers,
-# but which provide required behaviour for concrete views to build on.
-
-class BaseView(APIView):
- """
- Base class for all generic views.
- """
- serializer_class = None
-
- def get_serializer(self, data=None, files=None, instance=None):
- # TODO: add support for files
- context = {
- 'request': self.request,
- 'format': self.kwargs.get('format', None)
- }
- return self.serializer_class(data, instance=instance, context=context)
-
-
-class MultipleObjectBaseView(MultipleObjectMixin, BaseView):
- """
- Base class for generic views onto a queryset.
- """
- pass
-
-
-class SingleObjectBaseView(SingleObjectMixin, BaseView):
- """
- Base class for generic views onto a model instance.
- """
-
- def get_object(self):
- """
- Override default to add support for object-level permissions.
- """
- super(self, SingleObjectBaseView).get_object()
- self.check_permissions(self.request, self.object)
-
-
-# Concrete view classes that provide method handlers
-# by composing the mixin classes with a base view.
-
-class ListAPIView(mixins.ListModelMixin,
- mixins.MetadataMixin,
- MultipleObjectBaseView):
- """
- Concrete view for listing a queryset.
- """
- def get(self, request, *args, **kwargs):
- return self.list(request, *args, **kwargs)
-
- def options(self, request, *args, **kwargs):
- return self.metadata(request, *args, **kwargs)
-
-
-class RootAPIView(mixins.ListModelMixin,
- mixins.CreateModelMixin,
- mixins.MetadataMixin,
- 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)
-
- def options(self, request, *args, **kwargs):
- return self.metadata(request, *args, **kwargs)
-
-
-class DetailAPIView(mixins.RetrieveModelMixin,
- mixins.MetadataMixin,
- SingleObjectBaseView):
- """
- Concrete view for retrieving a model instance.
- """
- def get(self, request, *args, **kwargs):
- return self.retrieve(request, *args, **kwargs)
-
- def options(self, request, *args, **kwargs):
- return self.metadata(request, *args, **kwargs)
-
-
-class InstanceAPIView(mixins.RetrieveModelMixin,
- mixins.UpdateModelMixin,
- mixins.DestroyModelMixin,
- mixins.MetadataMixin,
- 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)
-
- def options(self, request, *args, **kwargs):
- return self.metadata(request, *args, **kwargs)