From 52b06e29c76dc9a5184edf3bbea64f0d4d5442b1 Mon Sep 17 00:00:00 2001 From: Aymeric Augustin Date: Sat, 18 Feb 2012 09:50:03 +0000 Subject: [PATCH] Prevented the generic views from automatically creating a HEAD method when there is no GET. Reverts r16105, refs #17449. git-svn-id: http://code.djangoproject.com/svn/django/trunk@17545 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/views/generic/base.py | 5 ++--- tests/regressiontests/generic_views/base.py | 15 ++++++++++++++- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/django/views/generic/base.py b/django/views/generic/base.py index f443cebfc0..6dfbc7a9da 100644 --- a/django/views/generic/base.py +++ b/django/views/generic/base.py @@ -43,6 +43,8 @@ class View(object): def view(request, *args, **kwargs): self = cls(**initkwargs) + if hasattr(self, 'get') and not hasattr(self, 'head'): + self.head = self.get return self.dispatch(request, *args, **kwargs) # take name and docstring from class @@ -76,9 +78,6 @@ class View(object): ) return http.HttpResponseNotAllowed(allowed_methods) - def head(self, *args, **kwargs): - return self.get(*args, **kwargs) - class TemplateResponseMixin(object): """ diff --git a/tests/regressiontests/generic_views/base.py b/tests/regressiontests/generic_views/base.py index d9debb6627..e7aeaf9cde 100644 --- a/tests/regressiontests/generic_views/base.py +++ b/tests/regressiontests/generic_views/base.py @@ -19,9 +19,15 @@ class SimplePostView(SimpleView): post = SimpleView.get +class PostOnlyView(View): + def post(self, request): + return HttpResponse('This view only accepts POST') + + class CustomizableView(SimpleView): parameter = {} + def decorator(view): view.is_decorated = True return view @@ -102,12 +108,19 @@ class ViewTest(unittest.TestCase): def test_get_and_head(self): """ - Test a view which supplies a GET method also responds correctly to HEAD + Test a view which supplies a GET method also responds correctly to HEAD. """ self._assert_simple(SimpleView.as_view()(self.rf.get('/'))) response = SimpleView.as_view()(self.rf.head('/')) self.assertEqual(response.status_code, 200) + def test_head_no_get(self): + """ + Test a view which supplies no GET method responds to HEAD with HTTP 405. + """ + response = PostOnlyView.as_view()(self.rf.head('/')) + self.assertEqual(response.status_code, 405) + def test_get_and_post(self): """ Test a view which only allows both GET and POST.