From da4fa9bded9bbbbacf2a3009e1e211bdd51e287a Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Wed, 5 Sep 2012 09:54:46 +0100 Subject: [PATCH] Minor tweaks --- djangorestframework/mixins.py | 43 +++++++++++++++++----------------- djangorestframework/request.py | 3 +++ djangorestframework/views.py | 21 ++++++++--------- 3 files changed, 35 insertions(+), 32 deletions(-) diff --git a/djangorestframework/mixins.py b/djangorestframework/mixins.py index 7269f2980..2f78876f0 100644 --- a/djangorestframework/mixins.py +++ b/djangorestframework/mixins.py @@ -2,27 +2,6 @@ from djangorestframework import status from djangorestframework.response import Response -class MetadataMixin(object): - """ - Should be mixed in with any `BaseView`. - """ - def metadata(self, request, *args, **kwargs): - content = { - 'name': self.get_name(), - 'description': self.get_description(), - 'renders': self._rendered_media_types, - 'parses': self._parsed_media_types, - } - # TODO: Add 'fields', from serializer info. - # 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) - - class CreateModelMixin(object): """ Create a model instance. @@ -83,3 +62,25 @@ class DestroyModelMixin(object): self.object = self.get_object() self.object.delete() return Response(status=status.HTTP_204_NO_CONTENT) + + +class MetadataMixin(object): + """ + Return a dicitonary of view metadata. + Should be mixed in with any `BaseView`. + """ + def metadata(self, request, *args, **kwargs): + content = { + 'name': self.get_name(), + 'description': self.get_description(), + 'renders': self._rendered_media_types, + 'parses': self._parsed_media_types, + } + # TODO: Add 'fields', from serializer info. + # 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) diff --git a/djangorestframework/request.py b/djangorestframework/request.py index 2e4e89092..99e50353c 100644 --- a/djangorestframework/request.py +++ b/djangorestframework/request.py @@ -234,6 +234,9 @@ class Request(object): user = authentication.authenticate(self) if user: return user + return self._not_authenticated() + + def _not_authenticated(self): return AnonymousUser() def __getattr__(self, name): diff --git a/djangorestframework/views.py b/djangorestframework/views.py index 9796b3629..5f9677823 100644 --- a/djangorestframework/views.py +++ b/djangorestframework/views.py @@ -224,18 +224,19 @@ class APIView(_View): def initial(self, request, *args, **kargs): """ - This method is a hook for any code that needs to run prior to - anything else. - Required if you want to do things like set `request.upload_handlers` - before the authentication and dispatch handling is run. + This method runs prior to anything else in the view. + It should return the initial request object. + + You may need to override this if you want to do things like set + `request.upload_handlers` before the authentication and dispatch + handling is run. """ - pass + return Request(request, parsers=self.parsers, authentication=self.authentication) def final(self, request, response, *args, **kargs): """ - This method is a hook for any code that needs to run after everything - else in the view. - Returns the final response object. + This method runs after everything else in the view. + It should return the final response object. """ if isinstance(response, Response): response.view = self @@ -269,14 +270,12 @@ class APIView(_View): # all other authentication is CSRF exempt. @csrf_exempt def dispatch(self, request, *args, **kwargs): - request = Request(request, parsers=self.parsers, authentication=self.authentication) - self.request = request self.args = args self.kwargs = kwargs self.headers = self.default_response_headers try: - self.initial(request, *args, **kwargs) + self.request = self.initial(request, *args, **kwargs) # Check that the request is allowed self.check_permissions(request)