diff options
| author | Tom Christie | 2012-10-08 14:13:15 +0100 |
|---|---|---|
| committer | Tom Christie | 2012-10-08 14:13:15 +0100 |
| commit | f79ed6175df62f68dba9179f792f95b6ac6dca14 (patch) | |
| tree | a8c173b79405a820d170f4f938a566fac3e137a2 /rest_framework | |
| parent | 52ba2e333375c6829fb89b6b43e4d19b2f2a86a4 (diff) | |
| download | django-rest-framework-f79ed6175df62f68dba9179f792f95b6ac6dca14.tar.bz2 | |
Add RetrieveDestroyAPIView and remove Metadata mixin
Diffstat (limited to 'rest_framework')
| -rw-r--r-- | rest_framework/generics.py | 27 | ||||
| -rw-r--r-- | rest_framework/mixins.py | 25 | ||||
| -rw-r--r-- | rest_framework/views.py | 23 |
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) |
