diff options
| author | Tom Christie | 2012-09-04 12:02:05 +0100 |
|---|---|---|
| committer | Tom Christie | 2012-09-04 12:02:05 +0100 |
| commit | 8457c871963264c9f62552f30307e98221a1c25d (patch) | |
| tree | 2048cbfc334aa5fca0d5c8d88fd20e50de667e41 /djangorestframework/views.py | |
| parent | 29dfbabaf54d75801b404e253a2d7574fa415564 (diff) | |
| download | django-rest-framework-8457c871963264c9f62552f30307e98221a1c25d.tar.bz2 | |
Bits of cleanup
Diffstat (limited to 'djangorestframework/views.py')
| -rw-r--r-- | djangorestframework/views.py | 70 |
1 files changed, 44 insertions, 26 deletions
diff --git a/djangorestframework/views.py b/djangorestframework/views.py index 1939eed2..3f0138d8 100644 --- a/djangorestframework/views.py +++ b/djangorestframework/views.py @@ -80,7 +80,7 @@ class APIView(_View): List of parser classes the view can parse the request with. """ - authentication = (authentication.UserLoggedInAuthentication, + authentication = (authentication.SessionAuthentication, authentication.BasicAuthentication) """ List of all authenticating methods to attempt. @@ -217,11 +217,14 @@ class APIView(_View): else in the view. Returns the final response object. """ - response.view = self - response.request = request - response.renderers = self.renderers + if isinstance(response, Response): + response.view = self + response.request = request + response.renderers = self.renderers + for key, value in self.headers.items(): response[key] = value + return response def handle_exception(self, exc): @@ -269,43 +272,43 @@ class APIView(_View): self.response = self.final(request, response, *args, **kwargs) return self.response - def options(self, request, *args, **kwargs): - content = { - 'name': self.get_name(), - 'description': self.get_description(), - 'renders': self._rendered_media_types, - 'parses': self._parsed_media_types, - } - form = self.get_bound_form() - if form 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 - raise Response(content, status=status.HTTP_200_OK) -# TODO: .get_serializer() +# 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): + context = { + 'request': self.request, + 'format': self.kwargs.get('format', None) + } + return self.serializer_class(data, context=context) -### Abstract view classes, that do not provide any method handlers ### -class MultipleObjectBaseView(MultipleObjectMixin, APIView): +class MultipleObjectBaseView(MultipleObjectMixin, BaseView): """ - Base class for views onto a queryset. + Base class for generic views onto a queryset. """ pass -class SingleObjectBaseView(SingleObjectMixin, APIView): +class SingleObjectBaseView(SingleObjectMixin, BaseView): """ - Base class for views onto a model instance. + Base class for generic views onto a model instance. """ pass -### Concrete view classes, that provide existing method handlers ### +# 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. @@ -313,9 +316,13 @@ 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 RootAPIView(mixins.ListModelMixin, mixins.CreateModelMixin, + mixins.MetadataMixin, MultipleObjectBaseView): """ Concrete view for listing a queryset or creating a model instance. @@ -326,19 +333,27 @@ class RootAPIView(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 DetailAPIView(mixins.RetrieveModelMixin, - SingleObjectBaseView): + 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. @@ -351,3 +366,6 @@ class InstanceAPIView(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) |
