mirror of
				https://github.com/encode/django-rest-framework.git
				synced 2025-11-04 09:57:55 +03:00 
			
		
		
		
	Support for HEAD method
This commit is contained in:
		
							parent
							
								
									fc1640de75
								
							
						
					
					
						commit
						0626b618ad
					
				| 
						 | 
				
			
			@ -67,6 +67,14 @@ except ImportError:
 | 
			
		|||
# django.views.generic.View (Django >= 1.3)
 | 
			
		||||
try:
 | 
			
		||||
    from django.views.generic import View
 | 
			
		||||
    if not hasattr(View, 'head'):
 | 
			
		||||
        # First implementation of Django class-based views did not include head method 
 | 
			
		||||
        # in base View class - https://code.djangoproject.com/ticket/15688
 | 
			
		||||
        class ViewPlusHead(View):
 | 
			
		||||
            def head(self, request, *args, **kwargs):
 | 
			
		||||
                return self.get(request, *args, **kwargs)
 | 
			
		||||
        View = ViewPlusHead
 | 
			
		||||
        
 | 
			
		||||
except ImportError:
 | 
			
		||||
    from django import http
 | 
			
		||||
    from django.utils.functional import update_wrapper
 | 
			
		||||
| 
						 | 
				
			
			@ -145,6 +153,8 @@ except ImportError:
 | 
			
		|||
            #)
 | 
			
		||||
            return http.HttpResponseNotAllowed(allowed_methods)
 | 
			
		||||
 | 
			
		||||
        def head(self, request, *args, **kwargs):
 | 
			
		||||
            return self.get(request, *args, **kwargs)
 | 
			
		||||
 | 
			
		||||
try:
 | 
			
		||||
    import markdown
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,7 +6,6 @@ from djangorestframework.compat import RequestFactory
 | 
			
		|||
from djangorestframework.mixins import RequestMixin
 | 
			
		||||
from djangorestframework.parsers import FormParser, MultiPartParser, PlainTextParser
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TestContentParsing(TestCase):
 | 
			
		||||
    def setUp(self):
 | 
			
		||||
        self.req = RequestFactory()
 | 
			
		||||
| 
						 | 
				
			
			@ -16,6 +15,11 @@ class TestContentParsing(TestCase):
 | 
			
		|||
        view.request = self.req.get('/')
 | 
			
		||||
        self.assertEqual(view.DATA, None)
 | 
			
		||||
 | 
			
		||||
    def ensure_determines_no_content_HEAD(self, view):
 | 
			
		||||
        """Ensure view.DATA returns None for HEAD request."""
 | 
			
		||||
        view.request = self.req.head('/')
 | 
			
		||||
        self.assertEqual(view.DATA, None)
 | 
			
		||||
 | 
			
		||||
    def ensure_determines_form_content_POST(self, view):
 | 
			
		||||
        """Ensure view.DATA returns content for POST request with form content."""
 | 
			
		||||
        form_data = {'qwerty': 'uiop'}
 | 
			
		||||
| 
						 | 
				
			
			@ -50,6 +54,10 @@ class TestContentParsing(TestCase):
 | 
			
		|||
        """Ensure view.DATA returns None for GET request with no content."""
 | 
			
		||||
        self.ensure_determines_no_content_GET(RequestMixin())
 | 
			
		||||
 | 
			
		||||
    def test_standard_behaviour_determines_no_content_HEAD(self):
 | 
			
		||||
        """Ensure view.DATA returns None for HEAD request."""
 | 
			
		||||
        self.ensure_determines_no_content_HEAD(RequestMixin())
 | 
			
		||||
 | 
			
		||||
    def test_standard_behaviour_determines_form_content_POST(self):
 | 
			
		||||
        """Ensure view.DATA returns content for POST request with form content."""
 | 
			
		||||
        self.ensure_determines_form_content_POST(RequestMixin())
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,3 +24,9 @@ class TestMethodOverloading(TestCase):
 | 
			
		|||
        view = RequestMixin()
 | 
			
		||||
        view.request = self.req.post('/', {view._METHOD_PARAM: 'DELETE'})
 | 
			
		||||
        self.assertEqual(view.method, 'DELETE')
 | 
			
		||||
 | 
			
		||||
    def test_HEAD_is_a_valid_method(self):
 | 
			
		||||
        """HEAD requests identified"""
 | 
			
		||||
        view = RequestMixin()
 | 
			
		||||
        view.request = self.req.head('/')
 | 
			
		||||
        self.assertEqual(view.method, 'HEAD')
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -51,6 +51,13 @@ class RendererIntegrationTests(TestCase):
 | 
			
		|||
        self.assertEquals(resp.content, RENDERER_A_SERIALIZER(DUMMYCONTENT))
 | 
			
		||||
        self.assertEquals(resp.status_code, DUMMYSTATUS)
 | 
			
		||||
 | 
			
		||||
    def test_head_method_serializes_no_content(self):
 | 
			
		||||
        """No response must be included in HEAD requests."""
 | 
			
		||||
        resp = self.client.head('/')
 | 
			
		||||
        self.assertEquals(resp.status_code, DUMMYSTATUS)
 | 
			
		||||
        self.assertEquals(resp['Content-Type'], RendererA.media_type)
 | 
			
		||||
        self.assertEquals(resp.content, '')
 | 
			
		||||
 | 
			
		||||
    def test_default_renderer_serializes_content_on_accept_any(self):
 | 
			
		||||
        """If the Accept header is set to */* the default renderer should serialize the response."""
 | 
			
		||||
        resp = self.client.get('/', HTTP_ACCEPT='*/*')
 | 
			
		||||
| 
						 | 
				
			
			@ -79,8 +86,6 @@ class RendererIntegrationTests(TestCase):
 | 
			
		|||
        resp = self.client.get('/', HTTP_ACCEPT='foo/bar')
 | 
			
		||||
        self.assertEquals(resp.status_code, 406)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
_flat_repr = '{"foo": ["bar", "baz"]}'
 | 
			
		||||
 | 
			
		||||
_indented_repr = """{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user