mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-06-23 15:03:22 +03:00
This commit is contained in:
commit
b522cc8e51
|
@ -1,4 +1,5 @@
|
||||||
from django.conf.urls.defaults import patterns, url
|
from django.conf.urls.defaults import patterns, url
|
||||||
|
from django.http import HttpResponse
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
from django.test import Client
|
from django.test import Client
|
||||||
from django import forms
|
from django import forms
|
||||||
|
@ -16,6 +17,13 @@ class MockView(View):
|
||||||
"""This is a basic mock view"""
|
"""This is a basic mock view"""
|
||||||
pass
|
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):
|
class ResourceMockView(View):
|
||||||
"""This is a resource-based mock 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/login$', 'api_login'),
|
||||||
url(r'^accounts/logout$', 'api_logout'),
|
url(r'^accounts/logout$', 'api_logout'),
|
||||||
url(r'^mock/$', MockView.as_view()),
|
url(r'^mock/$', MockView.as_view()),
|
||||||
|
url(r'^mock/final/$', MockViewFinal.as_view()),
|
||||||
url(r'^resourcemock/$', ResourceMockView.as_view()),
|
url(r'^resourcemock/$', ResourceMockView.as_view()),
|
||||||
url(r'^model/$', ListOrCreateModelView.as_view(resource=MockResource)),
|
url(r'^model/$', ListOrCreateModelView.as_view(resource=MockResource)),
|
||||||
url(r'^model/(?P<pk>[^/]+)/$', InstanceModelView.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"""
|
"""Test the base view class of djangorestframework"""
|
||||||
urls = 'djangorestframework.tests.views'
|
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):
|
def test_options_method_simple_view(self):
|
||||||
response = self.client.options('/mock/')
|
response = self.client.options('/mock/')
|
||||||
self._verify_options_response(response,
|
self._verify_options_response(response,
|
||||||
|
|
|
@ -154,19 +154,8 @@ class View(ResourceMixin, RequestMixin, ResponseMixin, AuthMixin, DjangoView):
|
||||||
except ErrorResponse, exc:
|
except ErrorResponse, exc:
|
||||||
response = exc.response
|
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)
|
set_script_prefix(orig_prefix)
|
||||||
|
return self.final(request, response, *args, **kwargs)
|
||||||
return self.render(response)
|
|
||||||
|
|
||||||
def options(self, request, *args, **kwargs):
|
def options(self, request, *args, **kwargs):
|
||||||
response_obj = {
|
response_obj = {
|
||||||
|
@ -183,6 +172,19 @@ class View(ResourceMixin, RequestMixin, ResponseMixin, AuthMixin, DjangoView):
|
||||||
response_obj['fields'] = field_name_types
|
response_obj['fields'] = field_name_types
|
||||||
return response_obj
|
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):
|
class ModelView(View):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue
Block a user