Minor tweaks

This commit is contained in:
Tom Christie 2012-09-05 09:54:46 +01:00
parent c28b719333
commit da4fa9bded
3 changed files with 35 additions and 32 deletions

View File

@ -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)

View File

@ -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):

View File

@ -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)