Remove RequestMixinx / ReponseMixin

This commit is contained in:
Tom Christie 2012-08-24 20:50:24 +01:00
parent 372e945097
commit 4e4584a01a
3 changed files with 39 additions and 77 deletions

View File

@ -11,13 +11,10 @@ from djangorestframework import status
from djangorestframework.renderers import BaseRenderer from djangorestframework.renderers import BaseRenderer
from djangorestframework.resources import Resource, FormResource, ModelResource from djangorestframework.resources import Resource, FormResource, ModelResource
from djangorestframework.response import Response, ImmediateResponse from djangorestframework.response import Response, ImmediateResponse
from djangorestframework.request import Request
__all__ = ( __all__ = (
# Base behavior mixins # Base behavior mixins
'RequestMixin',
'ResponseMixin',
'PermissionsMixin', 'PermissionsMixin',
'ResourceMixin', 'ResourceMixin',
# Model behavior mixins # Model behavior mixins
@ -30,76 +27,6 @@ __all__ = (
) )
########## Request Mixin ##########
class RequestMixin(object):
"""
`Mixin` class enabling the use of :class:`request.Request` in your views.
"""
request_class = Request
"""
The class to use as a wrapper for the original request object.
"""
def create_request(self, request):
"""
Creates and returns an instance of :class:`request.Request`.
This new instance wraps the `request` passed as a parameter, and use
the parsers set on the view.
"""
return self.request_class(request, parsers=self.parsers, authentication=self.authentication)
@property
def _parsed_media_types(self):
"""
Return a list of all the media types that this view can parse.
"""
return [parser.media_type for parser in self.parsers]
@property
def _default_parser(self):
"""
Return the view's default parser class.
"""
return self.parsers[0]
########## ResponseMixin ##########
class ResponseMixin(object):
"""
`Mixin` class enabling the use of :class:`response.Response` in your views.
"""
renderers = ()
"""
The set of response renderers that the view can handle.
Should be a tuple/list of classes as described in the :mod:`renderers` module.
"""
@property
def _rendered_media_types(self):
"""
Return an list of all the media types that this response can render.
"""
return [renderer.media_type for renderer in self.renderers]
@property
def _rendered_formats(self):
"""
Return a list of all the formats that this response can render.
"""
return [renderer.format for renderer in self.renderers]
@property
def _default_renderer(self):
"""
Return the response's default renderer class.
"""
return self.renderers[0]
########## Permissions Mixin ########## ########## Permissions Mixin ##########
class PermissionsMixin(object): class PermissionsMixin(object):

View File

@ -6,7 +6,6 @@ from django.test import TestCase
from djangorestframework import status from djangorestframework import status
from djangorestframework.compat import View as DjangoView from djangorestframework.compat import View as DjangoView
from djangorestframework.response import Response from djangorestframework.response import Response
from djangorestframework.mixins import ResponseMixin
from djangorestframework.views import View from djangorestframework.views import View
from djangorestframework.renderers import BaseRenderer, JSONRenderer, YAMLRenderer, \ from djangorestframework.renderers import BaseRenderer, JSONRenderer, YAMLRenderer, \
XMLRenderer, JSONPRenderer, DocumentingHTMLRenderer XMLRenderer, JSONPRenderer, DocumentingHTMLRenderer
@ -40,7 +39,7 @@ class RendererB(BaseRenderer):
return RENDERER_B_SERIALIZER(obj) return RENDERER_B_SERIALIZER(obj)
class MockView(ResponseMixin, DjangoView): class MockView(View):
renderers = (RendererA, RendererB) renderers = (RendererA, RendererB)
def get(self, request, **kwargs): def get(self, request, **kwargs):

View File

@ -12,6 +12,7 @@ from django.views.decorators.csrf import csrf_exempt
from djangorestframework.compat import View as DjangoView, apply_markdown from djangorestframework.compat import View as DjangoView, apply_markdown
from djangorestframework.response import Response, ImmediateResponse from djangorestframework.response import Response, ImmediateResponse
from djangorestframework.request import Request
from djangorestframework.mixins import * from djangorestframework.mixins import *
from djangorestframework import resources, renderers, parsers, authentication, permissions, status from djangorestframework import resources, renderers, parsers, authentication, permissions, status
@ -67,7 +68,7 @@ _resource_classes = (
) )
class View(ResourceMixin, RequestMixin, ResponseMixin, PermissionsMixin, DjangoView): class View(ResourceMixin, PermissionsMixin, DjangoView):
""" """
Handles incoming requests and maps them to REST operations. Handles incoming requests and maps them to REST operations.
Performs request deserialization, response serialization, authentication and input validation. Performs request deserialization, response serialization, authentication and input validation.
@ -187,6 +188,41 @@ class View(ResourceMixin, RequestMixin, ResponseMixin, PermissionsMixin, DjangoV
} }
raise ImmediateResponse(content, status.HTTP_405_METHOD_NOT_ALLOWED) raise ImmediateResponse(content, status.HTTP_405_METHOD_NOT_ALLOWED)
@property
def _parsed_media_types(self):
"""
Return a list of all the media types that this view can parse.
"""
return [parser.media_type for parser in self.parsers]
@property
def _default_parser(self):
"""
Return the view's default parser class.
"""
return self.parsers[0]
@property
def _rendered_media_types(self):
"""
Return an list of all the media types that this response can render.
"""
return [renderer.media_type for renderer in self.renderers]
@property
def _rendered_formats(self):
"""
Return a list of all the formats that this response can render.
"""
return [renderer.format for renderer in self.renderers]
@property
def _default_renderer(self):
"""
Return the response's default renderer class.
"""
return self.renderers[0]
def initial(self, request, *args, **kargs): def initial(self, request, *args, **kargs):
""" """
This method is a hook for any code that needs to run prior to This method is a hook for any code that needs to run prior to
@ -213,7 +249,7 @@ class View(ResourceMixin, RequestMixin, ResponseMixin, PermissionsMixin, DjangoV
# all other authentication is CSRF exempt. # all other authentication is CSRF exempt.
@csrf_exempt @csrf_exempt
def dispatch(self, request, *args, **kwargs): def dispatch(self, request, *args, **kwargs):
request = self.create_request(request) request = Request(request, parsers=self.parsers, authentication=self.authentication)
self.request = request self.request = request
self.args = args self.args = args