aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework
diff options
context:
space:
mode:
authorTom Christie2012-10-08 14:13:15 +0100
committerTom Christie2012-10-08 14:13:15 +0100
commitf79ed6175df62f68dba9179f792f95b6ac6dca14 (patch)
treea8c173b79405a820d170f4f938a566fac3e137a2 /rest_framework
parent52ba2e333375c6829fb89b6b43e4d19b2f2a86a4 (diff)
downloaddjango-rest-framework-f79ed6175df62f68dba9179f792f95b6ac6dca14.tar.bz2
Add RetrieveDestroyAPIView and remove Metadata mixin
Diffstat (limited to 'rest_framework')
-rw-r--r--rest_framework/generics.py27
-rw-r--r--rest_framework/mixins.py25
-rw-r--r--rest_framework/views.py23
3 files changed, 35 insertions, 40 deletions
diff --git a/rest_framework/generics.py b/rest_framework/generics.py
index 51874f28..59739d01 100644
--- a/rest_framework/generics.py
+++ b/rest_framework/generics.py
@@ -96,7 +96,6 @@ class SingleObjectBaseView(SingleObjectMixin, BaseView):
### by composing the mixin classes with a base view. ###
class ListAPIView(mixins.ListModelMixin,
- mixins.MetadataMixin,
MultipleObjectBaseView):
"""
Concrete view for listing a queryset.
@@ -104,13 +103,9 @@ class ListAPIView(mixins.ListModelMixin,
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 ListCreateAPIView(mixins.ListModelMixin,
mixins.CreateModelMixin,
- mixins.MetadataMixin,
MultipleObjectBaseView):
"""
Concrete view for listing a queryset or creating a model instance.
@@ -121,12 +116,8 @@ class ListCreateAPIView(mixins.ListModelMixin,
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 RetrieveAPIView(mixins.RetrieveModelMixin,
- mixins.MetadataMixin,
SingleObjectBaseView):
"""
Concrete view for retrieving a model instance.
@@ -134,14 +125,23 @@ class RetrieveAPIView(mixins.RetrieveModelMixin,
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 RetrieveDestroyAPIView(mixins.RetrieveModelMixin,
+ mixins.DestroyModelMixin,
+ SingleObjectBaseView):
+ """
+ Concrete view for retrieving or deleting a model instance.
+ """
+ def get(self, request, *args, **kwargs):
+ return self.retrieve(request, *args, **kwargs)
+
+ def delete(self, request, *args, **kwargs):
+ return self.destroy(request, *args, **kwargs)
class RetrieveUpdateDestroyAPIView(mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
- mixins.MetadataMixin,
SingleObjectBaseView):
"""
Concrete view for retrieving, updating or deleting a model instance.
@@ -154,6 +154,3 @@ class RetrieveUpdateDestroyAPIView(mixins.RetrieveModelMixin,
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/rest_framework/mixins.py b/rest_framework/mixins.py
index 7cfbe030..29153e18 100644
--- a/rest_framework/mixins.py
+++ b/rest_framework/mixins.py
@@ -112,28 +112,3 @@ class DestroyModelMixin(object):
self.object = self.get_object()
self.object.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
-
-
-# TODO: Remove MetadataMixin, and implement on APIView.options()
-class MetadataMixin(object):
- """
- Return a dicitonary of view metadata.
- Should be mixed in with any `BaseView`.
-
- This mixin is typically used for the HTTP 'OPTIONS' method.
- """
- def metadata(self, request, *args, **kwargs):
- content = {
- 'name': self.get_name(),
- 'description': self.get_description(),
- 'renders': [renderer.media_type for renderer in self.renderer_classes],
- 'parses': [parser.media_type for parser in self.parser_classes],
- }
- # TODO: Add 'fields', from serializer info.
- # serializer = self.get_serializer()
- # if serializer is not None:
- # field_name_types = {}
- # for name, field in form.fields.iteritems():
- # field_name_types[name] = field.__class__.__name__
- # content['fields'] = field_name_types
- return Response(content, status=status.HTTP_200_OK)
diff --git a/rest_framework/views.py b/rest_framework/views.py
index 0aa1dd0d..790c76fa 100644
--- a/rest_framework/views.py
+++ b/rest_framework/views.py
@@ -124,6 +124,21 @@ class APIView(View):
description = escape(description).replace('\n', '<br />')
return mark_safe(description)
+ def metadata(self, request):
+ return {
+ 'name': self.get_name(),
+ 'description': self.get_description(),
+ 'renders': [renderer.media_type for renderer in self.renderer_classes],
+ 'parses': [parser.media_type for parser in self.parser_classes],
+ }
+ # TODO: Add 'fields', from serializer info, if it exists.
+ # serializer = self.get_serializer()
+ # if serializer is not None:
+ # field_name_types = {}
+ # for name, field in form.fields.iteritems():
+ # field_name_types[name] = field.__class__.__name__
+ # content['fields'] = field_name_types
+
def http_method_not_allowed(self, request, *args, **kwargs):
"""
Called if `request.method` does not corrospond to a handler method.
@@ -309,3 +324,11 @@ class APIView(View):
self.response = self.finalize_response(request, response, *args, **kwargs)
return self.response
+
+ def options(self, request, *args, **kwargs):
+ """
+ Handler method for HTTP 'OPTIONS' request.
+ We may as well implement this as Django will otherwise provide
+ a less useful default implementation.
+ """
+ return Response(self.metadata(request), status=status.HTTP_200_OK)