mirror of
				https://github.com/encode/django-rest-framework.git
				synced 2025-11-04 09:57:55 +03:00 
			
		
		
		
	This commit is contained in:
		
						commit
						b522cc8e51
					
				| 
						 | 
				
			
			@ -1,4 +1,5 @@
 | 
			
		|||
from django.conf.urls.defaults import patterns, url
 | 
			
		||||
from django.http import HttpResponse
 | 
			
		||||
from django.test import TestCase
 | 
			
		||||
from django.test import Client
 | 
			
		||||
from django import forms
 | 
			
		||||
| 
						 | 
				
			
			@ -16,6 +17,13 @@ class MockView(View):
 | 
			
		|||
    """This is a basic mock view"""
 | 
			
		||||
    pass
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class MockViewFinal(View):
 | 
			
		||||
    """View with final() override"""
 | 
			
		||||
 | 
			
		||||
    def final(self, request, response, *args, **kwargs):
 | 
			
		||||
        return HttpResponse('{"test": "passed"}', content_type="application/json")
 | 
			
		||||
 | 
			
		||||
class ResourceMockView(View):
 | 
			
		||||
    """This is a resource-based mock view"""
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -43,6 +51,7 @@ urlpatterns = patterns('djangorestframework.utils.staticviews',
 | 
			
		|||
    url(r'^accounts/login$', 'api_login'),
 | 
			
		||||
    url(r'^accounts/logout$', 'api_logout'),
 | 
			
		||||
    url(r'^mock/$', MockView.as_view()),
 | 
			
		||||
    url(r'^mock/final/$', MockViewFinal.as_view()),
 | 
			
		||||
    url(r'^resourcemock/$', ResourceMockView.as_view()),
 | 
			
		||||
    url(r'^model/$', ListOrCreateModelView.as_view(resource=MockResource)),
 | 
			
		||||
    url(r'^model/(?P<pk>[^/]+)/$', InstanceModelView.as_view(resource=MockResource)),
 | 
			
		||||
| 
						 | 
				
			
			@ -52,6 +61,13 @@ class BaseViewTests(TestCase):
 | 
			
		|||
    """Test the base view class of djangorestframework"""
 | 
			
		||||
    urls = 'djangorestframework.tests.views'
 | 
			
		||||
 | 
			
		||||
    def test_view_call_final(self):
 | 
			
		||||
        response = self.client.options('/mock/final/')
 | 
			
		||||
        self.assertEqual(response['Content-Type'].split(';')[0], "application/json")
 | 
			
		||||
        parser = JSONParser(None)
 | 
			
		||||
        (data, files) = parser.parse(StringIO(response.content))
 | 
			
		||||
        self.assertEqual(data['test'], 'passed')
 | 
			
		||||
 | 
			
		||||
    def test_options_method_simple_view(self):
 | 
			
		||||
        response = self.client.options('/mock/')
 | 
			
		||||
        self._verify_options_response(response,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -154,19 +154,8 @@ class View(ResourceMixin, RequestMixin, ResponseMixin, AuthMixin, DjangoView):
 | 
			
		|||
        except ErrorResponse, exc:
 | 
			
		||||
            response = exc.response
 | 
			
		||||
 | 
			
		||||
        # Always add these headers.
 | 
			
		||||
        #
 | 
			
		||||
        # TODO - this isn't actually the correct way to set the vary header,
 | 
			
		||||
        # also it's currently sub-optimal for HTTP caching - need to sort that out.
 | 
			
		||||
        response.headers['Allow'] = ', '.join(self.allowed_methods)
 | 
			
		||||
        response.headers['Vary'] = 'Authenticate, Accept'
 | 
			
		||||
 | 
			
		||||
        # merge with headers possibly set at some point in the view
 | 
			
		||||
        response.headers.update(self.headers)
 | 
			
		||||
 | 
			
		||||
        set_script_prefix(orig_prefix)
 | 
			
		||||
 | 
			
		||||
        return self.render(response)
 | 
			
		||||
        return self.final(request, response, *args, **kwargs)
 | 
			
		||||
 | 
			
		||||
    def options(self, request, *args, **kwargs):
 | 
			
		||||
        response_obj = {
 | 
			
		||||
| 
						 | 
				
			
			@ -183,6 +172,19 @@ class View(ResourceMixin, RequestMixin, ResponseMixin, AuthMixin, DjangoView):
 | 
			
		|||
            response_obj['fields'] = field_name_types
 | 
			
		||||
        return response_obj
 | 
			
		||||
 | 
			
		||||
    def final(self, request, response, *args, **kargs):
 | 
			
		||||
        """
 | 
			
		||||
        Hook for any code that needs to run after everything else in the view.
 | 
			
		||||
        """
 | 
			
		||||
        # Always add these headers.
 | 
			
		||||
        response.headers['Allow'] = ', '.join(self.allowed_methods)
 | 
			
		||||
        # sample to allow caching using Vary http header
 | 
			
		||||
        response.headers['Vary'] = 'Authenticate, Accept'
 | 
			
		||||
 | 
			
		||||
        # merge with headers possibly set at some point in the view
 | 
			
		||||
        response.headers.update(self.headers)
 | 
			
		||||
        return self.render(response)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ModelView(View):
 | 
			
		||||
    """
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user