diff options
| author | Tom Christie | 2012-10-05 10:33:44 +0100 | 
|---|---|---|
| committer | Tom Christie | 2012-10-05 10:33:44 +0100 | 
| commit | ed281be3fb3f49ffee69f08aeb95f116528dc833 (patch) | |
| tree | 4bd7567629bbe3615f61d6dd380d3d3bd8548d2e /rest_framework | |
| parent | d07dc77e91c1f99b47915b3cef30b565f2618e82 (diff) | |
| download | django-rest-framework-ed281be3fb3f49ffee69f08aeb95f116528dc833.tar.bz2 | |
User .accepted_renderer, .accepted_media_type
Diffstat (limited to 'rest_framework')
| -rw-r--r-- | rest_framework/tests/negotiation.py | 23 | ||||
| -rw-r--r-- | rest_framework/views.py | 16 | 
2 files changed, 12 insertions, 27 deletions
diff --git a/rest_framework/tests/negotiation.py b/rest_framework/tests/negotiation.py index dd9f6a76..d8265b43 100644 --- a/rest_framework/tests/negotiation.py +++ b/rest_framework/tests/negotiation.py @@ -1,8 +1,6 @@  from django.test import TestCase  from django.test.client import RequestFactory -from rest_framework.decorators import api_view, renderer_classes  from rest_framework.negotiation import DefaultContentNegotiation -from rest_framework.response import Response  factory = RequestFactory() @@ -10,26 +8,14 @@ factory = RequestFactory()  class MockJSONRenderer(object):      media_type = 'application/json' -    def __init__(self, view): -        pass -  class MockHTMLRenderer(object):      media_type = 'text/html' -    def __init__(self, view): -        pass - - -@api_view(('GET',)) -@renderer_classes((MockJSONRenderer, MockHTMLRenderer)) -def example(request): -    return Response() -  class TestAcceptedMediaType(TestCase):      def setUp(self): -        self.renderers = [MockJSONRenderer(None), MockHTMLRenderer(None)] +        self.renderers = [MockJSONRenderer(), MockHTMLRenderer()]          self.negotiator = DefaultContentNegotiation()      def negotiate(self, request): @@ -49,10 +35,3 @@ class TestAcceptedMediaType(TestCase):          request = factory.get('/', HTTP_ACCEPT='application/json; indent=8')          accepted_renderer, accepted_media_type = self.negotiate(request)          self.assertEquals(accepted_media_type, 'application/json; indent=8') - - -class IntegrationTests(TestCase): -    def test_accepted_negotiation_set_on_request(self): -        request = factory.get('/', HTTP_ACCEPT='*/*') -        response = example(request) -        self.assertEquals(response.accepted_media_type, 'application/json') diff --git a/rest_framework/views.py b/rest_framework/views.py index 4dd0d208..0359c225 100644 --- a/rest_framework/views.py +++ b/rest_framework/views.py @@ -199,20 +199,26 @@ class APIView(View):          Runs anything that needs to occur prior to calling the method handlers.          """          self.format = self.get_format_suffix(**kwargs) +          if not self.has_permission(request):              self.permission_denied(request)          self.check_throttles(request) -        self.renderer, self.accepted_media_type = self.perform_content_negotiation(request) + +        # Perform content negotiation and store the accepted info on the request +        neg = self.perform_content_negotiation(request) +        request.accepted_renderer, request.accepted_media_type = neg      def finalize_response(self, request, response, *args, **kwargs):          """          Returns the final response object.          """          if isinstance(response, Response): -            if not getattr(self, 'renderer', None): -                self.renderer, self.accepted_media_type = self.perform_content_negotiation(request, force=True) -            response.accepted_renderer = self.renderer -            response.accepted_media_type = self.accepted_media_type +            if not getattr(request, 'accepted_renderer', None): +                neg = self.perform_content_negotiation(request, force=True) +                request.accepted_renderer, request.accepted_media_type = neg + +            response.accepted_renderer = request.accepted_renderer +            response.accepted_media_type = request.accepted_media_type          for key, value in self.headers.items():              response[key] = value  | 
